首页
视频
资源
登录
原
.net core 为选项数据添加验证:避免错误配置的应用接收用户流量
4140
人阅读
2020/7/8 10:40
总访问:
2537800
评论:
0
收藏:
0
手机
分类:
.net后台框架
![.netcore](https://img.tnblog.net/arcimg/hb/c857299a86d84ee7b26d181a31e58234.jpg ".netcore") >#.net core 为选项数据添加验证:避免错误配置的应用接收用户流量 [TOC] <br/> 三种验证方法 ------------ <br/> - 直接注册验证函数 - 实现 IValidateOptions<out TOptions> - 使用 Microsoft.Extensions.Options.DataAnnotations 内容示例 ------------ >###项目架构 参考:https://www.tnblog.net/hb/article/details/4738 >###直接注册验证函数 <br/> >通过 OrderServiceExtensions.cs 进行验证配置 MaxOrderCount 值 < 100 <font style="color:#2ecc71;font-weight:bold;">OrderServiceExtensions.cs</font> ```csharp public static IServiceCollection AddOrderService(this IServiceCollection services,IConfiguration configuration) { services.AddOptions<OrderServiceOptions>().Configure(options => { configuration.Bind(options); }).Validate(options=> { //验证逻辑 return options.MaxOrderCount < 100; }, "MaxOrderCount 不能大于 100");//报错信息 services.AddSingleton<IOrderService, OrderService>(); return services; } ``` >这里<font style="color:#f1c40f;font-weight:bold;">appsetting.json</font>的值 ```json "OrderService": { "MaxOrderCount": 200 } ``` >我们会发现它大于100肯定是不行所以: ![大于100](https://img.tnblog.net/arcimg/hb/4b2b1088587848839b9e924db9729ded.png) >###属性注入进行验证 <br/> ><font style="color:#2ecc71;font-weight:bold;">OrderServiceExtensions.cs</font> ```csharp public static IServiceCollection AddOrderService(this IServiceCollection services,IConfiguration configuration) { services.AddOptions<OrderServiceOptions>().Configure(options => { configuration.Bind(options); }).ValidateDataAnnotations(); services.AddSingleton<IOrderService, OrderService>(); return services; } ``` ><font style="color:#2ecc71;font-weight:bold;">OrderService.cs</font> ```csharp public class OrderServiceOptions { //限制只能在1-20之间 [Range(1,20)] public int MaxOrderCount { get; set; } = 100; } ``` >我们会发现它不在1-20的范围之内肯定是不行的: ![范围](https://img.tnblog.net/arcimg/hb/b6d4956f23c649c58672609863e58470.png) >###通过接口进行验证 <br/> >在 <font style="color:#2ecc71;font-weight:bold;">OrderService.cs</font> 下添加验证类 注意:验证类是需要实现 <font style="color:#f39c12;font-weight:bold;">IValidateOptions</font> 接口的,通过 <font style="color:#9b59b6;font-weight:bold;">Validate</font> 方法实现自定义验证逻辑 ```csharp public class OrderServiceValidateOptions : IValidateOptions<OrderServiceOptions> { public ValidateOptionsResult Validate(string name, OrderServiceOptions options) { if (options.MaxOrderCount > 100) { return ValidateOptionsResult.Fail("不能大于100"); } else { return ValidateOptionsResult.Success; } } } ``` >通过**单例模式**注入到<font style="color:#2ecc71;font-weight:bold;">OrderServiceExtensions.cs</font> ```csharp public static IServiceCollection AddOrderService(this IServiceCollection services,IConfiguration configuration) { services.AddOptions<OrderServiceOptions>().Configure(options => { configuration.Bind(options); }).Services.AddSingleton<IValidateOptions<OrderServiceOptions>, OrderServiceValidateOptions>(); services.AddSingleton<IOrderService, OrderService>(); return services; } ``` >运行一下: ![运行一下](https://img.tnblog.net/arcimg/hb/4bd658923e7d49cebdda82d094c66fb8.png) 总结 ------------ >通过添加选项的验证,我们可以在配置错误的情况下阻止应用程序启动,这样我们就可以避免用户流量达到错误的节点上!
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}
尘叶心繁
这一世以无限游戏为使命!
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
.net后台框架
166篇
linux
17篇
linux中cve
1篇
windows中cve
0篇
资源分享
10篇
Win32
3篇
前端
28篇
传说中的c
4篇
Xamarin
9篇
docker
15篇
容器编排
101篇
grpc
4篇
Go
15篇
yaml模板
1篇
理论
2篇
更多
Sqlserver
4篇
云产品
39篇
git
3篇
Unity
1篇
考证
2篇
RabbitMq
23篇
Harbor
1篇
Ansible
8篇
Jenkins
17篇
Vue
1篇
Ids4
18篇
istio
1篇
架构
2篇
网络
7篇
windbg
4篇
AI
18篇
threejs
2篇
人物
1篇
嵌入式
2篇
python
13篇
HuggingFace
8篇
pytorch
9篇
opencv
6篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术