簡體   English   中英

HttpPost MVC中的可選參數標記為必需?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM