【发布时间】:2019-03-14 03:29:14
【问题描述】:
我喜欢 ASP.NET Core 2.1 中新增的 Automatic HTTP 400 responses 功能,它在大多数情况下运行良好。
但是,在一个操作中,我需要在验证有效负载之前进行一些预处理。我有一个自定义验证器,它需要模型中的两个值来执行验证。其中一个值在路径中,因此我想从路径中在模型上设置该值,然后进行验证。
我不想关闭所有操作的功能:
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 核心 repo 上提出的问题的链接,以防万一 - https://github.com/aspnet/Mvc/issues/8575
【问题讨论】:
-
好吧,如果您对添加 3rd 方库感到满意,那么有一个名为 fluent validation 的工具可以帮助验证复杂的模型类型,并且还支持“预验证”逻辑。它可能会有所帮助。这是文档:fluentvalidation.net/start#using-prevalidate
标签: asp.net asp.net-core