为什么要使用CreatedAtAction在WebAPI POST方法中返回对象?

时间:2020-05-15 07:10:40

标签: c# asp.net-core-webapi

在Asp.NET Core中为API编写POST方法时,可以使用CreatedAtAction

以下是documentation

中的示例
[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. “位置”响应标头将包含在新资源的URI中
  3. 创建的对象将在响应正文中返回

前两个对我来说似乎很合理。但是我不知道为什么需要第三种效果?最初,似乎没有必要增加响应大小,但是我很好奇为什么要在文档中按原样显示该模式,包括创建的对象。返回创建的资源的好处是什么?还是将对象包含在响应中的(唯一的)原因是要包含服务器端生成的值,例如创建日期或主键?

1 个答案:

答案 0 :(得分:2)

服务器可以生成客户端不知道的新数据,例如用于创建或修改的ID或时间戳。如果客户在初始请求后需要此数据,则可以通过在响应正文中包含创建的资源来节省不必要的往返行程。

它并不总是最佳选择。您权衡了立即访问与带宽使用量增加带来的好处。在以这种方式返回大量资源之前,需要进行一些考虑。

相关问题