ASP.NET 核心操作过滤器未被调用
ASP.NET Core Action Filter Doesn't Get Called
我有一个 ASP.NET Core API (.Net Core 2.1),我使用这篇文章实现了一个动作过滤器
在我的模型中,我使用数据注释来验证模型,并在我的控制器中为操作添加了 ValidateModel 属性。
[HttpPost("CreateShipment")]
[ValidateModel]
public IActionResult CreateShipment([FromBody] CreateShipmentRequest request)
{
if (ModelState.IsValid)
{
//Do something
}
return Ok();
}
我使用 Postman 对此进行了测试,只有在模型有效时才会调用我的动作过滤器。如果我的请求缺少必填字段或某些值超出范围,则不会调用 Action Filter。相反,我收到了一个 400 错误请求,响应中包含模型状态。
我实现了操作过滤器,因为我想自定义我的模型验证错误。我的理解是动作过滤器在模型绑定时被调用。谁能帮我弄清楚为什么会这样,以及如何让动作过滤器工作?
更新:我在发布问题 2 秒后找到了解决方案,下面发布的 link @Silvermind 也是很好的信息。
我在 Startup.cs
中添加了以下行
services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
它在 Microsoft 站点上有详细的记录。
https://docs.microsoft.com/en-us/aspnet/core/web-api/index?view=aspnetcore-2.1#automatic-http-400-responses
将以下行添加到 Startup.cs,ConfigureServices() 方法解决了该问题。事实证明,.Net Core 默认启用了自动 400 响应。如果您想添加自定义操作过滤器,您需要在启动时设置这些选项。
services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
在 Microsoft 网站上有详细的记录:
[ApiController] 属性自动执行模型验证并触发 404 的 HTTP 响应,在 .Net Core 3.0 中,您可以链接到新的 AddControllers() 以抑制此功能:
services.AddControllers()
.ConfigureApiBehaviorOptions(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
我有一个 ASP.NET Core API (.Net Core 2.1),我使用这篇文章实现了一个动作过滤器
在我的模型中,我使用数据注释来验证模型,并在我的控制器中为操作添加了 ValidateModel 属性。
[HttpPost("CreateShipment")]
[ValidateModel]
public IActionResult CreateShipment([FromBody] CreateShipmentRequest request)
{
if (ModelState.IsValid)
{
//Do something
}
return Ok();
}
我使用 Postman 对此进行了测试,只有在模型有效时才会调用我的动作过滤器。如果我的请求缺少必填字段或某些值超出范围,则不会调用 Action Filter。相反,我收到了一个 400 错误请求,响应中包含模型状态。
我实现了操作过滤器,因为我想自定义我的模型验证错误。我的理解是动作过滤器在模型绑定时被调用。谁能帮我弄清楚为什么会这样,以及如何让动作过滤器工作?
更新:我在发布问题 2 秒后找到了解决方案,下面发布的 link @Silvermind 也是很好的信息。
我在 Startup.cs
中添加了以下行services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
它在 Microsoft 站点上有详细的记录。 https://docs.microsoft.com/en-us/aspnet/core/web-api/index?view=aspnetcore-2.1#automatic-http-400-responses
将以下行添加到 Startup.cs,ConfigureServices() 方法解决了该问题。事实证明,.Net Core 默认启用了自动 400 响应。如果您想添加自定义操作过滤器,您需要在启动时设置这些选项。
services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
在 Microsoft 网站上有详细的记录:
[ApiController] 属性自动执行模型验证并触发 404 的 HTTP 响应,在 .Net Core 3.0 中,您可以链接到新的 AddControllers() 以抑制此功能:
services.AddControllers()
.ConfigureApiBehaviorOptions(options =>
{
options.SuppressModelStateInvalidFilter = true;
});