![](/img/trans.png)
[英]ASP.NET Core 5 Web API, POST return CreatedAtAction error
[英]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 动作结果有以下效果:
前两个在我看来是合理的。 但是我想知道为什么需要第三种效果? 起初,这似乎是响应大小的不必要增加,但我很好奇为什么该模式会按原样出现在文档中,包括创建的 object。 返回作为请求发送的已创建资源有什么好处? 或者可能是在响应中包含 object 的(唯一)原因是包含服务器端生成的值,例如创建日期或主键?
服务器可以生成客户端不知道的新数据,例如用于创建或修改的 ID 或时间戳。 如果客户端在初始请求后需要此数据,您可以通过在响应正文中包含创建的资源来节省不必要的往返行程。
它并不总是最好的选择。 您已经权衡了立即访问与增加带宽使用的好处。 在以这种方式返回大量资源之前,需要进行一些考虑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.