我很喜欢ASP.NET Core 2.1中新增的自动HTTP 400响应功能,对于大多数情况,它的效果非常好。
然而,在一个操作中,在验证负载之前,我需要进行一些预处理。我有一个自定义验证器,需要模型中的两个值来执行验证。其中一个值在路径中,所以我想从路径设置该值到模型中,然后进行验证。
我不想关闭所有操作的此功能:
然而,在一个操作中,在验证负载之前,我需要进行一些预处理。我有一个自定义验证器,需要模型中的两个值来执行验证。其中一个值在路径中,所以我想从路径设置该值到模型中,然后进行验证。
我不想关闭所有操作的此功能:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
}
有没有办法只针对某个操作关闭它?
编辑:
我尝试修改InvalidModelStateResponseFactory,但它并没有解决我的问题,因为我仍然需要进入控制器操作:
services.Configure<ApiBehaviorOptions>(options =>
{
options.InvalidModelStateResponseFactory = actionContext =>
{
var ignore = actionContext.ActionDescriptor.FilterDescriptors.Any(fd => fd.Filter is SuppressModelStateInvalidFilterAttribute);
if (ignore)
{
// Can only return IActionResult so doesn't enter the controller action.
}
return new BadRequestObjectResult(actionContext.ModelState);
};
});
[AttributeUsage(AttributeTargets.Method)]
public class SuppressModelStateInvalidFilterAttribute : FormatFilterAttribute
{
}
编辑:
以下是我在asp.net core仓库上报告的问题链接,如果我有任何进展,可以查看 - https://github.com/aspnet/Mvc/issues/8575