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 作为响应主体自动处理模型验证错误:
要禁用自动 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);
}
}
}
并全局注册它以将过滤器应用于每个请求。
我有一个自定义模型验证器来验证和 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 作为响应主体自动处理模型验证错误:
要禁用自动 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);
}
}
}
并全局注册它以将过滤器应用于每个请求。