为什么我们不再需要在更高版本的ASP.NET Core中手动验证模型?

精灵鲍勃

在碰到端点之前,我的所有模型都会自动进行验证,如果某种形式的验证失败,则会返回相应的错误。

我记得在ASP.NET Core 2.2中,我们需要手动调用ModelState.IsValid以确保对象已通过验证检查,但是对于最新的ASP.NET Core 3.0,情况似乎并非如此,而且我在哪里都没有/明确配置任何服务以使此行为存在。

有人可以对此事发表一些看法,或者可以在他们提到此更改的地方链接相关消息来源吗?

编辑:是由于[ApiController]属性?请参阅:https : //docs.microsoft.com/zh-cn/aspnet/core/web-api/?view=aspnetcore-3.1#automatic-http-400-responses

谢谢!

柠檬

使用该[ApiController]属性时,无需在每个方法中检查ModelState.IsValid,因为会自动返回400状态代码以及验证失败的字段的名称,请参阅https://docs.microsoft.com/zh-cn /aspnet/core/mvc/models/validation?view=aspnetcore-3.1

您甚至可以修改400状态代码的外观。这篇博客文章应该使您入门:https : //coderethinked.com/customizing-automatic-http-400-error-response-in-asp-net-core-web-apis/

添加此依赖项:

services.AddMvc.SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
.ConfigureApiBehaviorOptions(options =>
{
    options.InvalidModelStateResponseFactory = context =>
    {
        var problems = new CustomBadRequest(context);
        return new BadRequestObjectResult(problems);
    };
});

您的自定义错误请求类可能如下所示。如果要包含有关错误的其他信息,例如错误严重性,警告等,请创建YourErrorClass类。

public class CustomBadRequest
{
    [JsonProperty("httpstatuscode")]
    public string HttpStatusCode { get; set; }

    [JsonProperty("errors")]
    public List<YourErrorClass> Errors { get; set; } = new List<YourErrorClass>();

    public CustomBadRequest(ActionContext context)
    {
        this.HttpStatusCode = "400";
        this.Errors = new List<YourErrorClass>();
        this.ConstructErrorMessages(context);
    }

    private void ConstructErrorMessages(ActionContext context)
    {
        foreach (var keyModelStatePair in context.ModelState)
        {
            var key = keyModelStatePair.Key;
            var errors = keyModelStatePair.Value.Errors;
            if (errors != null && errors.Count > 0)
            {
                foreach (var error in errors)
                {
                    Errors.Add(new YourErrorClass()
                    {
                        ErrorMessage = error.ErrorMessage
                        // add additional information, if you like
                    });
                }
            }
        }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在ASP.NET MVC 4中手动删除Cookie

来自分类Dev

为什么我们需要在ConnectionString中设置最小池大小

来自分类Dev

手动密码验证ASP.NET

来自分类Dev

为什么我们需要在multiSVM方法中进行交叉验证以进行图像分类?

来自分类Dev

ASP.NET MVC手动删除不显眼的验证错误

来自分类Dev

手动验证ASP.NET Identity中的密码重置令牌

来自分类Dev

如何在ASP.Net WebForm中手动使缓存数据无效

来自分类Dev

为什么我们需要在Android应用中存储Goefence数据?

来自分类Dev

手动验证ASP.NET Identity用户帐户

来自分类Dev

为什么我们需要在MSIL中显式调用父构造函数?

来自分类Dev

为什么我们需要在JavaScript中定义构造函数

来自分类Dev

在ASP.NET 5中手动创建防伪令牌并进行验证

来自分类Dev

为什么我们需要在民意调查中调用poll_wait?

来自分类Dev

为什么我们需要在此脚本中调用“ c.set.bind(c)”?

来自分类Dev

为什么我们在ASP .NET 5 wwwroot中需要web.config?

来自分类Dev

为什么我们需要在Kafka Consumer Configuration中添加所有Zookeeper节点

来自分类Dev

为什么我们需要在ASP.NET MVC中调用父类的空虚方法

来自分类Dev

如何在ASP.NET Core RC2应用程序中手动重新加载IOptions

来自分类Dev

ASP.NET Core中的Windows身份验证:手动登录与自动Intranet登录和可用组

来自分类Dev

在ASP.NET Core中间件构造函数中混合依赖项注入和手动传递的参数

来自分类Dev

为什么我们要在ConfigureServices中的AddJwtBearer中以及在asp.net核心中创建新的JwtSecurityToken时都提供发布者,受众和密钥

来自分类Dev

手动创建IWebHostEnvironment asp.net core 3.1

来自分类Dev

为什么我们需要从ASP.NET Core 2.1迁移到3.1

来自分类Dev

我们是否需要在.net 4.0或4.5中使用此关键字

来自分类Dev

ASP.NET MVC4手动Ajax发布验证

来自分类Dev

如何在ASP.NET MVC 4中手动删除Cookie

来自分类Dev

我们需要在Asp.net中为网站页面创建Class文件吗?

来自分类Dev

为什么我们需要在MongoDB中定义数据模型

来自分类Dev

为什么我们需要在 asp.net 中将 varchar 更改为 string?

Related 相关文章

  1. 1

    如何在ASP.NET MVC 4中手动删除Cookie

  2. 2

    为什么我们需要在ConnectionString中设置最小池大小

  3. 3

    手动密码验证ASP.NET

  4. 4

    为什么我们需要在multiSVM方法中进行交叉验证以进行图像分类?

  5. 5

    ASP.NET MVC手动删除不显眼的验证错误

  6. 6

    手动验证ASP.NET Identity中的密码重置令牌

  7. 7

    如何在ASP.Net WebForm中手动使缓存数据无效

  8. 8

    为什么我们需要在Android应用中存储Goefence数据?

  9. 9

    手动验证ASP.NET Identity用户帐户

  10. 10

    为什么我们需要在MSIL中显式调用父构造函数?

  11. 11

    为什么我们需要在JavaScript中定义构造函数

  12. 12

    在ASP.NET 5中手动创建防伪令牌并进行验证

  13. 13

    为什么我们需要在民意调查中调用poll_wait?

  14. 14

    为什么我们需要在此脚本中调用“ c.set.bind(c)”?

  15. 15

    为什么我们在ASP .NET 5 wwwroot中需要web.config?

  16. 16

    为什么我们需要在Kafka Consumer Configuration中添加所有Zookeeper节点

  17. 17

    为什么我们需要在ASP.NET MVC中调用父类的空虚方法

  18. 18

    如何在ASP.NET Core RC2应用程序中手动重新加载IOptions

  19. 19

    ASP.NET Core中的Windows身份验证:手动登录与自动Intranet登录和可用组

  20. 20

    在ASP.NET Core中间件构造函数中混合依赖项注入和手动传递的参数

  21. 21

    为什么我们要在ConfigureServices中的AddJwtBearer中以及在asp.net核心中创建新的JwtSecurityToken时都提供发布者,受众和密钥

  22. 22

    手动创建IWebHostEnvironment asp.net core 3.1

  23. 23

    为什么我们需要从ASP.NET Core 2.1迁移到3.1

  24. 24

    我们是否需要在.net 4.0或4.5中使用此关键字

  25. 25

    ASP.NET MVC4手动Ajax发布验证

  26. 26

    如何在ASP.NET MVC 4中手动删除Cookie

  27. 27

    我们需要在Asp.net中为网站页面创建Class文件吗?

  28. 28

    为什么我们需要在MongoDB中定义数据模型

  29. 29

    为什么我们需要在 asp.net 中将 varchar 更改为 string?

热门标签

归档