在 .NET Core 中,如果我的 appsettings 文件看起来像
{
"Section": {
"Field": "value"
}
}
我可以创建一个类
public class Section
{
public string Field { get; set; }
}
并在 Startup 中检索值,例如
public void ConfigureServices(IServiceCollection services) {
services.Configure<Section>(this.Configuration.GetSection("Section"));
}
问题是,如果由于某种原因(比如拼写错误)绑定失败,它不会抛出,而是会Section
为该Field
属性创建一个具有 null(默认)值的对象。
services.Configure<Section>(this.Configuration.GetSection("Section"));
如果绑定失败,有没有办法抛出?
我只是在这里总结@Nkosi 的答案,这使得使用数据注释进行验证成为可能。
1- 注释类的属性:
public class Section
{
[Required]
public string Field { get; set; }
}
2- 创建一个扩展方法使验证生效:
public static class ConfigurationModelValidation
{
public static T GetValid<T>(this IConfiguration configuration)
{
var obj = configuration.Get<T>();
Validator.ValidateObject(obj, new ValidationContext(obj), true);
return obj;
}
}
3- 在Startup
课程中,使用GetValid
方法(而不是使用“IOptions”)注册您的配置模型如下:
public void ConfigureServices(IServiceCollection services) {
services.AddSingleton(this.Configuration.GetSection("Section").GetValid<Section>());
}
4- 现在在用户的类中直接注入您的配置模型:
public class MyClass
{
private readonly string field;
public MyClass(Section section)
{
this.field = section.field;
}
}
现在,如果绑定因任何原因失败,验证将启动并抛出,享受吧!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句