從Config讀取設定後,驗證資料正確性的三種方式
在開始前,先在appsetting.json定義了一個隨處可見的自訂設定
"MySetting": {
"Id":123,
"Name": "Test",
"Data": ["A","B","C"]
}
並且在Startup讀取配置
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.Configure<MyConfig>(Configuration.GetSection("MySetting"));
}
第一種,在讀取到配置時,就會拋出Exception
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddOptions<MyConfig>().Configure(config =>
{
Configuration.Bind(config);
}).Validate(config => config.Id!=0,"Id 不能等於0");
}
第二種,為Config的屬性加上DataAnnotations的Attribute
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddOptions<MyConfig>().Configure(config =>
{
Configuration.Bind(config);
}).ValidateDataAnnotations();
}
public class MyConfig
{
[Range(1, int.MaxValue)]
public int Id { get; set; }
public string Name { get; set; }
public List<string> Data { get; set; }
}
第三種,實作一個IValidateOptions<T>
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddOptions<MyConfig>().Configure(config =>
{
Configuration.Bind(config);
}).Services.AddTransient<IValidateOptions<MyConfig>, MyConfigValidate>();
}
public class MyConfigValidate : IValidateOptions<MyConfig>
{
public ValidateOptionsResult Validate(string name, MyConfig options)
{
if (options.Id == 0)
{
return ValidateOptionsResult.Fail("id can not be 0");
}
return ValidateOptionsResult.Success;
}
}
Sample Code https://github.com/ianChen806/ConfigValidateSample