c# - .NET Core 2.1 覆盖自动模型验证

标签 c# validation .net-core-2.1

在最新的 .NET Core 2.1 中,引入了模型状态验证的自动验证(https://blogs.msdn.microsoft.com/webdev/2018/02/02/asp-net-core-2-1-roadmap/#mvc)。

以前我可以通过下面的代码覆盖验证错误响应:

public class ApiValidateModelAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        if (!context.ModelState.IsValid)
        {
            context.Result = new BadRequestObjectResult(new context.ModelState);
        }

    base.OnActionExecuting(context);
}

但现在它不再起作用了。不输入覆盖方法就响应验证错误。

有人知道吗? 谢谢。

最佳答案

如果您想继续使用 ApiController 属性(它具有其他功能,例如禁用常规路由和允许模型绑定(bind)而不添加 [FromBody] 参数属性),你可以通过你的 Startup.cs 文件来做到这一点:

services.Configure<ApiBehaviorOptions>(opt =>
{
    opt.SuppressModelStateInvalidFilter = true;
});

这样一来,如果 ModelState 无效,它就不会自动返回 400 错误。

关于c# - .NET Core 2.1 覆盖自动模型验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51125569/

相关文章:

c# - ChannelFactory 会发生故障吗?

java - 使用 IKVM 将 .jar 导入 .dll 并使用它

C# DateTime ParseExact 异常

jquery - MVC3 jquery.validate.unobtrusive 覆盖选项而不编辑源代码?

javascript - php中来自mysql数据库的重复值验证

c# - Blazor、ASP.NET Core 托管与 ASP.NET Core 中的服务器端

azure - 在 Function App 中连接依赖注入(inject)时获取配置

c# - 使用 C# 的 Optimus headless 浏览器

javascript - LARAVEL 5.3 - 在服务器端验证后按名称标记字段

docker - 通过 telnet 连接到 docker 容器