
.net core 为选项数据添加验证:避免错误配置的应用接收用户流量
三种验证方法
- 直接注册验证函数
- 实现 IValidateOptions
- 使用 Microsoft.Extensions.Options.DataAnnotations
内容示例
项目架构
参考:https://www.tnblog.net/hb/article/details/4738
直接注册验证函数
通过 OrderServiceExtensions.cs 进行验证配置 MaxOrderCount 值 < 100
OrderServiceExtensions.cs
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;
}
这里appsetting.json的值
"OrderService": {
"MaxOrderCount": 200
}
我们会发现它大于100肯定是不行所以:
属性注入进行验证
OrderServiceExtensions.cs
public static IServiceCollection AddOrderService(this IServiceCollection services,IConfiguration configuration)
{
services.AddOptions<OrderServiceOptions>().Configure(options =>
{
configuration.Bind(options);
}).ValidateDataAnnotations();
services.AddSingleton<IOrderService, OrderService>();
return services;
}
OrderService.cs
public class OrderServiceOptions
{
//限制只能在1-20之间
[Range(1,20)]
public int MaxOrderCount { get; set; } = 100;
}
我们会发现它不在1-20的范围之内肯定是不行的:
通过接口进行验证
在 OrderService.cs 下添加验证类
注意:验证类是需要实现 IValidateOptions 接口的,通过 Validate 方法实现自定义验证逻辑
public class OrderServiceValidateOptions : IValidateOptions<OrderServiceOptions>
{
public ValidateOptionsResult Validate(string name, OrderServiceOptions options)
{
if (options.MaxOrderCount > 100)
{
return ValidateOptionsResult.Fail("不能大于100");
}
else
{
return ValidateOptionsResult.Success;
}
}
}
通过单例模式注入到OrderServiceExtensions.cs
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;
}
运行一下:
总结
通过添加选项的验证,我们可以在配置错误的情况下阻止应用程序启动,这样我们就可以避免用户流量达到错误的节点上!
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
评价
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 :
好是好,这个对效率影响大不大哇,效率高不高
一个bug让程序员走上法庭 索赔金额达400亿日元
剑轩 : 有点可怕
ASP.NET Core 服务注册生命周期
剑轩 :
http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术