Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# webapi中的模型状态验证_C#_Validation_Asp.net Core_Asp.net Core Webapi_Asp.net Core Middleware - Fatal编程技术网

C# webapi中的模型状态验证

C# webapi中的模型状态验证,c#,validation,asp.net-core,asp.net-core-webapi,asp.net-core-middleware,C#,Validation,Asp.net Core,Asp.net Core Webapi,Asp.net Core Middleware,我有一个自定义模型验证器来验证和返回自定义验证消息 public void Validate(Object instance) { // Perfom validations and thow exceptions if any throw new ValidationException(); } 现在,我想使用我的自定义验证器验证每个即将到来的请求。 中间件和fitler有httpcontex

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

public void Validate(Object instance) {
                // Perfom validations and thow exceptions if any
                   throw new ValidationException();
               }
现在,我想使用我的自定义验证器验证每个即将到来的请求。
中间件和fitler有httpcontext对象,我应该读取请求正文,反序列化,然后调用我的自定义验证器来执行验证。
我已抑制默认的自动http 400响应


在每次请求Web API之前,是否有合适的方法调用自定义验证器?

当应用
[ApiController]
属性时,ASP.NET Core会自动处理模型验证错误,方法是返回400个错误请求,并将ModelState作为响应主体:

要禁用自动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);
        }
    }
}

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

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

要禁用自动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);
        }
    }
}
并全局注册以将筛选器应用于每个请求