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

Kes*_*Kes 4 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);
}
Run Code Online (Sandbox Code Playgroud)

但现在它已经不再适用了.无需输入覆盖方法即可响应验证错误.

有人有任何线索吗?谢谢.

Zou*_*out 11

如果您想继续使用该ApiController属性(具有其他功能,如禁用传统路由并允许模型绑定而不添加[FromBody]参数属性),您可以通过此Startup.cs文件在您的文件中执行此操作:

services.Configure<ApiBehaviorOptions>(opt =>
{
    opt.SuppressModelStateInvalidFilter = true;
});
Run Code Online (Sandbox Code Playgroud)

这将使得如果ModelState无效,它将不会自动返回400错误.


Dan*_*rgo 7

最近一位朋友问我这个问题,我的方法是用ModalStateInvalidFilter自定义的替换默认值。

在我的测试中,我从这里实施了建议,然后:

services.AddMvc(options =>
{
    options.Filters.Add(typeof(ValidateModelAttribute));
});


services.Configure<ApiBehaviorOptions>(options => { options.SuppressModelStateInvalidFilter = true; });
Run Code Online (Sandbox Code Playgroud)