ASP.NET Core 中配置对象的模型验证

哈维

在 .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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.NET Core中的加密配置

来自分类Dev

ASP.NET Core中的kendo配置

来自分类Dev

覆盖ASP .NET Core中的请求对象

来自分类Dev

ASP Net Core Web API自定义模型验证

来自分类Dev

模型验证:RequireIfNull 属性(ASP.NET Core)

来自分类Dev

ASP Net Core 模型验证范围属性被忽略

来自分类Dev

如何在ASP.NET Core中实现自定义模型验证?

来自分类Dev

尝试在ASP Net Core中配置metrics.net

来自分类Dev

ASP.NET Core 3 MVC:对象列表的模型绑定

来自分类Dev

如何在ASP.NET Core 1.0中配置身份验证

来自分类Dev

模型绑定Asp net core 2.2

来自分类Dev

ASP.Net Core JWT令牌验证

来自分类Dev

ASP.NET Core,验证数字密码

来自分类Dev

使用设置配置ASP.NET Core

来自分类Dev

ASP.net Core 2.2 配置

来自分类Dev

在 ASP .Net Core MVC 2.1 模型中访问 List<T>

来自分类Dev

ASP.NET Core中的承载令牌身份验证

来自分类Dev

ASP.NET Core中的基本身份验证

来自分类Dev

使用身份在Asp.Net Core 3.1中配置Cookie

来自分类Dev

访问 ASP.NET Core 中的配置选项:选项模式

来自分类Dev

记录 ASP.NET Core 中的配置更改

来自分类Dev

如何在asp.net core中配置依赖

来自分类Dev

模型绑定对象集合作为 ASP.Net Core MVC 中模型的一个属性

来自分类Dev

ASP.NET Core中的属性

来自分类Dev

ASP.Net Core中的动态路由

来自分类Dev

Asp.net Core中的UserHostAddress

来自分类Dev

ASP.NET Core 1.0中的会话

来自分类Dev

ASP.NET Core中的依赖注入

来自分类Dev

在ASP.NET Core中禁用分块