gpt4 book ai didi

c# - ASP.NET Core Action 筛选器未被调用

转载 作者:行者123 更新时间:2023-11-30 15:14:19 26 4
gpt4 key购买 nike

我有一个 ASP.NET Core API (.Net Core 2.1),我使用这篇文章实现了一个 Action 过滤器

https://learn.microsoft.com/en-us/aspnet/core/mvc/controllers/filters?view=aspnetcore-2.1#action-filters

在我的模型中,我使用数据注释来验证模型,并在我的 Controller 中为操作添加了 ValidateModel 属性。

    [HttpPost("CreateShipment")]
[ValidateModel]
public IActionResult CreateShipment([FromBody] CreateShipmentRequest request)
{
if (ModelState.IsValid)
{
//Do something
}
return Ok();
}

我使用 Postman 对此进行了测试,只有当模型有效时才会调用我的 Action Filter。如果我的请求缺少必填字段或某些值超出范围,则不会调用 Action Filter。相反,我收到了一个 400 错误请求,响应中包含模型状态。

我实现了操作过滤器,因为我想自定义我的模型验证错误。我的理解是 Action 过滤器在模型绑定(bind)时被调用。谁能帮我弄清楚为什么会这样,以及如何让 Action Filter 工作?

更新:我在发布问题 2 秒后找到了解决方案,下面发布的链接@Silvermind 也是很好的信息。

我将以下行添加到我的 Startup.cs

services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});

它在 Microsoft 站点上有详细的记录。 https://learn.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 网站上有详细的记录:

https://learn.microsoft.com/en-us/aspnet/core/web-api/index?view=aspnetcore-2.1#automatic-http-400-responses

关于c# - ASP.NET Core Action 筛选器未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55050720/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com