ras*_*ali 2 c# validation asp.net-core asp.net-core-middleware asp.net-core-webapi
我有一个自定义模型验证器来验证和返回自定义验证消息。
public void Validate(Object instance) {
// Perfom validations and thow exceptions if any
throw new ValidationException();
}
Run Code Online (Sandbox Code Playgroud)
现在,我想使用我的自定义验证器来验证每个即将到来的请求。
中间件和 Fitlers 有httpcontext对象,我应该读取请求正文,解链,然后调用我的自定义验证器来执行验证。
我抑制了默认的自动 http 400 响应。
在对 Web API 的每个请求之前,是否有任何正确的方法来调用自定义验证器?
Nan*_* Yu 10
当[ApiController]应用属性,ASP.NET核心自动处理通过返回的ModelState一个400错误的请求的响应人体模型验证错误:
要禁用自动 400 行为,请将SuppressModelStateInvalidFilter属性设置为 true :
services.AddControllers()
.ConfigureApiBehaviorOptions(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
Run Code Online (Sandbox Code Playgroud)
然后您可以创建全局操作过滤器来检查ModelState.IsValid并添加您的自定义模型验证,例如:
public class CustomModelValidate : ActionFilterAttribute {
public override void OnActionExecuting(ActionExecutingContext context) {
if (!context.ModelState.IsValid) {
context.Result = new BadRequestObjectResult(context.ModelState);
}
}
}
Run Code Online (Sandbox Code Playgroud)
并全局注册它以将过滤器应用于每个请求。
| 归档时间: |
|
| 查看次数: |
3650 次 |
| 最近记录: |