17 | 为选项数据添加验证:避免错误配置的应用接收用户流量
三种验证方法
1、直接注册验证函数
2、实现 IValidateOptions
3、使用 Microsoft.Extensions.Options.DataAnnotations
延用上一节代码
需要添加验证的时候不能用 Configure,而用 AddOptions 方法
//services.Configure<OrderServiceOptions>(configuration);services.AddOptions<OrderServiceOptions>().Configure(options =>
{configuration.Bind(options);
}).Validate(options =>
{return options.MaxOrderCount <= 100;
}, "MaxOrderCount 不能大于100");
配置中的值是200,所以运行之后报错,提示 “MaxOrderCount 不能大于100”
接着使用属性的方式,切换成属性注入
services.AddOptions<OrderServiceOptions>().Configure(options =>
{configuration.Bind(options);
}).ValidateDataAnnotations();
还需要修改 OrderServiceOptions,定义它的验证属性
public class OrderServiceOptions
{
[Range(30, 100)]
public int MaxOrderCount { get; set; } = 100;
}
配置中的值是200,所以运行之后报错,提示 “MaxOrderCount 的值必须在30到100之间”
接着是第三种方式,实现接口的方式
首先是定义验证类
public class OrderServiceValidateOptions : IValidateOptions<OrderServiceOptions>
{public ValidateOptionsResult Validate(string name, OrderServiceOptions options){if (options.MaxOrderCount > 100){return ValidateOptionsResult.Fail("MaxOrderCount 不能大于100");}else{return ValidateOptionsResult.Success;}}
}
要使用这个类,需要注入进去
services.AddOptions<OrderServiceOptions>().Configure(options =>
{configuration.Bind(options);
}).Services.AddSingleton<IValidateOptions<OrderServiceOptions>>(new OrderServiceValidateOptions( ));
配置中的值是200,所以运行之后报错,提示 “MaxOrderCount 不能大于100”
总结一下,通过添加选项的验证,可以在配置错误的情况下阻止应用程序启动,这样就可以避免用户流量达到错误的节点上