亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

未調用 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 關注
  • 113 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號