[英]Optional parameters in HttpPost MVC marked as required?
在我的 C# 代碼中,我的 Microsoft.AspNetCore.Mvc.ApiController 中有一個獲取值的方法。 但是,如果我在沒有在 POST 調用中設置 Origin 標頭的情況下調用 GetThingsAsync 方法,則會收到 400 BadRequest 錯誤。
[HttpPost]
[Route("route")]
public async Task<IActionResult> GetThingsAsync(
[FromBody] SomeRequest someRequest,
[FromHeader(Name = "Origin")] string origin = "Unknown")
{
// Code goes here
}
我得到的錯誤是這樣的:
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "REDACTED",
"errors":
{
"Origin":
[
"The origin field is required."
]
}
}
現在,我假設如果沒有設置 Origin,我正在編寫的代碼應該有一個默認值 Unknown。 但是,原始值要么設置不正確,要么驗證在某些方面過於熱情。 我想知道為什么在沒有在請求中設置 Origin 標頭的情況下運行此代碼時出現錯誤。
我知道可以通過添加一個來解決這個問題? 像這樣的字符串參數:
[HttpPost]
[Route("route")]
public async Task<IActionResult> GetThingsAsync(
[FromBody] SomeRequest someRequest,
[FromHeader(Name = "Origin")] string? origin = "Unknown")
{
// Code goes here
}
話雖如此,我想知道為什么即使它具有默認值也需要此標頭。 是否設置為空?
假設您使用 ASP.NET 6,其他版本不會出現 400 錯誤。
正如這份文件所說:
從 .NET 6 開始,新項目在項目文件中包含
<Nullable>enable</Nullable>
元素。 開啟該功能后,現有的引用變量聲明將變為不可為空的引用類型。
這樣在 asp.net 6 中就必須要求不可為空的屬性,否則 ModelState 將無效。
一種方法是從項目文件中刪除<Nullable>enable</Nullable>
。
另一種方法是添加?
如下所示:
[HttpPost]
[Route("route")]
public void GetThingsAsync(
[FromBody] SomeRequestsomeRequest,
[FromHeader(Name = "Origin")] string? origin = "Unknown")
{
// Code goes here
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.