Web 中的模型状态验证 API

Model State Validation in Web API

我有一个自定义模型验证器来验证和 return 自定义验证消息。

public void Validate(Object instance) {
                // Perfom validations and thow exceptions if any
                   throw new ValidationException();
               }

现在,我想使用我的自定义验证器验证每个即将到来的请求。
中间件和过滤器有 httpcontext 对象,我应该读取请求正文,反序列化然后调用我的自定义验证器来执行验证。
我已经抑制了默认的自动 http 400 响应。

在每个 Web 请求之前,是否有任何正确的方法来调用自定义验证器 API?

当应用 [ApiController] 属性时,ASP.NET Core 通过返回 400 Bad Request 并将 ModelState 作为响应主体自动处理模型验证错误:

Automatic HTTP 400 responses

要禁用自动 400 行为,请将 SuppressModelStateInvalidFilter 属性 设置为 true :

services.AddControllers()
    .ConfigureApiBehaviorOptions(options => 
    {   
        options.SuppressModelStateInvalidFilter = true;     
    });

然后您可以创建全局操作过滤器来检查 ModelState.IsValid 并添加您的自定义模型验证,例如:

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

并全局注册它以将过滤器应用于每个请求。