为了账号安全,请及时绑定邮箱和手机立即绑定

未调用 ASP.NET Core 操作筛选器

未调用 ASP.NET Core 操作筛选器

C#
30秒到达战场 2022-10-15 14:35:06
我有一个 ASP.NET Core API (.Net Core 2.1),我使用这篇文章实现了一个动作过滤器https://learn.microsoft.com/en-us/aspnet/core/mvc/controllers/filters?view=aspnetcore-2.1#action-filters在我的模型中,我使用数据注释来验证模型,并为控制器中的操作添加了 ValidateModel 属性。    [HttpPost("CreateShipment")]    [ValidateModel]    public IActionResult CreateShipment([FromBody] CreateShipmentRequest request)    {         if (ModelState.IsValid)         {            //Do something         }         return Ok();    }我使用 Postman 对此进行了测试,并且仅当模型有效时才会调用我的动作过滤器。如果我的请求缺少必填字段或某些值超出范围,则不会调用操作筛选器。相反,我收到一个 400 错误请求,响应中包含模型状态。我实现了动作过滤器,因为我想自定义我的模型验证错误。我的理解是动作过滤器在模型绑定时被调用。有人可以帮我弄清楚为什么会发生这种情况以及如何让动作过滤器工作吗?更新:我在发布问题 2 秒后找到了解决方案,下面发布的链接 @Silvermind 也是很好的信息。我将以下行添加到我的 Startup.csservices.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
查看完整描述

2 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

将以下行添加到 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


查看完整回答
反对 回复 2022-10-15
?
不负相思意

TA贡献1777条经验 获得超10个赞

[ApiController] 属性自动执行模型验证并触发 404 的 HTTP 响应,在 .Net Core 3.0 中,您可以链接到新的 AddControllers() 以抑制此功能:


services.AddControllers()

                .ConfigureApiBehaviorOptions(options =>

                {

                    options.SuppressModelStateInvalidFilter = true;

                });


查看完整回答
反对 回复 2022-10-15
  • 2 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信