將我的 WebApi 專案更改為使用 .NET 6 而不是 .NET Core 3.1 作為我的陣列查詢引數型別時,我注意到一個驗證錯誤。以前他們不會回傳驗證錯誤,但在 6.0 中會回傳。
我有以下查詢類:
public class Query
{
public List<string> Id { get; set; }
}
以及具有以下端點的控制器:
[HttpGet()]
public IActionResult Get([FromQuery] Test2 test)
{
return Ok()
}
當我發送一個不帶任何查詢引數的查詢時,我會收到一個BadRequest,它在使用 .NET 6 實作時將欄位 id 標記為必需。使用 .NET Core 3.1(或 5.0)時,該方法可以正確執行。
為了重現,我創建了一個帶有 .NET Core 3.1、5.0 和 6.0 的 ASP.NET Core WebApi 專案,并添加了一個控制器端點,其中包含一個包含字串陣列的查詢物體,如上例所示,沒有任何其他更改。
坦率地說,我對這個有點難過。我嘗試手動執行 System.ComponentModel 的驗證器,但這產生了預期的結果(沒有錯誤)。我沒有在腳手架上添加任何可以解釋這種行為的東西,它基本上是相同的。我也沒有在 .NET 6.0 的重大更改串列中找到任何提及這一點。
向 Id 屬性添加自定義驗證屬性(“NotRequired”)修復了該行為,但是我希望能夠保持查詢模型與以前一樣,并且 ComponentModel 不顯示任何錯誤。
uj5u.com熱心網友回復:
從檔案:
驗證系統將不可為空的引數或系結屬性視為具有
[Required(AllowEmptyStrings = true)]屬性。通過啟用 Nullable 背景關系,MVC 隱式開始驗證不可為 null 的屬性或引數,就好像它們已被賦予[Required(AllowEmptyStrings = true)]屬性一樣。
您可以將屬性設定為可為空的參考型別,以便它成為Id可選的:
public class Query
{
public List<string>? Id { get; set; }
}
或者您可以完全禁用可空背景關系分析,這也將恢復到舊行為(所以我個人建議不要這樣做)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/446527.html
標籤:C# asp.net 核心 asp.net-core-3.1 .net-6.0
下一篇:我在SqlDataReader中有我的資料并將其傳遞給html視圖,我如何在視圖中使用該資訊并將其顯示到表格中?
