簡體   English   中英

為什么使用 CreatedAtAction 在 WebAPI POST 方法中返回 object?

[英]Why return object in WebAPI POST method with CreatedAtAction?

在 Asp.NET 內核中為 API 編寫 POST 方法時,可以使用CreatedAtAction

以下示例來自文檔

[HttpPost]
[Consumes(MediaTypeNames.Application.Json)]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<IActionResult> CreateAsync(Product product)
{
    if (product.Description.Contains("XYZ Widget"))
    {
        return BadRequest();
    }

    await _repository.AddProductAsync(product);

    return CreatedAtAction(nameof(GetById), new { id = product.Id }, product);
}

CreatedAtAction 動作結果有以下效果:

  1. 響應狀態代碼將為 201
  2. “位置”響應 Header 將包含在新資源的 URI 中
  3. 創建的 object 會在響應體中返回

前兩個在我看來是合理的。 但是我想知道為什么需要第三種效果? 起初,這似乎是響應大小的不必要增加,但我很好奇為什么該模式會按原樣出現在文檔中,包括創建的 object。 返回作為請求發送的已創建資源有什么好處? 或者可能是在響應中包含 object 的(唯一)原因是包含服務器端生成的值,例如創建日期或主鍵?

服務器可以生成客戶端不知道的新數據,例如用於創建或修改的 ID 或時間戳。 如果客戶端在初始請求后需要此數據,您可以通過在響應正文中包含創建的資源來節省不必要的往返行程。

它並不總是最好的選擇。 您已經權衡了立即訪問與增加帶寬使用的好處。 在以這種方式返回大量資源之前,需要進行一些考慮。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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