C# 为什么在WebAPI POST方法中使用CreateDataAction返回对象?
在Asp.NET内核中为API编写POST方法时,可以使用 下面是来自C# 为什么在WebAPI POST方法中使用CreateDataAction返回对象?,c#,asp.net-core-webapi,C#,Asp.net Core Webapi,在Asp.NET内核中为API编写POST方法时,可以使用 下面是来自 [HttpPost] [使用(MediaTypeNames.Application.Json)] [产品响应类型(StatusCodes.Status201Created)] [产品响应类型(StatusCodes.Status400BadRequest)] 公共异步任务CreateAsync(产品) { if(product.Description.Contains(“XYZ小部件”)) { 返回请求(); } wait_
[HttpPost]
[使用(MediaTypeNames.Application.Json)]
[产品响应类型(StatusCodes.Status201Created)]
[产品响应类型(StatusCodes.Status400BadRequest)]
公共异步任务CreateAsync(产品)
{
if(product.Description.Contains(“XYZ小部件”))
{
返回请求();
}
wait_repository.AddProductAsync(产品);
返回CreateDataAction(nameof(GetById),new{id=product.id},product);
}
CreateDataAction操作结果具有以下效果:
前两个对我来说似乎是合理的。然而,我想知道为什么需要第三种效果?起初,这似乎是对响应大小的不必要的增加,但我很好奇为什么文档中会出现这种模式,包括创建的对象。返回创建的资源的好处是什么,它是作为请求发送的?或者,将对象包含在响应中的(唯一)原因是包含服务器端生成的值,例如创建日期或主键?服务器可以生成客户端不知道的新数据,例如用于创建或修改的ID或时间戳。如果客户机在初始请求后需要此数据,则可以通过将创建的资源包含在响应正文中来节省不必要的往返
这并不总是最好的选择。您已经权衡了立即访问的好处和带宽使用的增加。在以这种方式返回大量资源之前,需要考虑一些因素。这是方便性和灵活性的结合。客户端可能希望验证资源是否按照请求创建,而不遵循位置标头。服务器可能会返回与作为输入的资源不同的资源表示形式,等等。
[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);
}