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