【问题标题】:Model State Validation in Web APIWeb API 中的模型状态验证
【发布时间】:2020-05-22 19:43:57
【问题描述】:

我有一个自定义模型验证器来验证并返回自定义验证消息。

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

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

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

【问题讨论】:

    标签: c# validation asp.net-core asp.net-core-webapi asp.net-core-middleware


    【解决方案1】:

    当应用[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);
            }
        }
    }
    

    并在全局范围内注册以将过滤器应用于每个请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-18
      • 2012-05-03
      • 2020-05-17
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 2019-03-26
      相关资源
      最近更新 更多