我想告知我的API用户新创建对象的位置。 我知道有Created()
CreatedAtRoute()
和CreatedAtAction()
,但我不确定如何使用它。
这是我尝试过的:
我有一个Get资源,我想指向它。 它以ID作为输入:
[HttpGet("/${id}", Name = "GetProduct")]
[ProducesResponseType(typeof(Produkt), 200)]
public IActionResult Get([FromRoute] int id)
{
// some code...
return Ok(...);
}
当通过我的POST路由创建产品时,我希望通过Location标头指向此资源。
尝试1
[HttpPost]
[ProducesResponseType(typeof(Produkt), 200)]
public IActionResult CreateNewProduct([FromBody] ProduktDtoForCreate productFromBody)
{
//...
return CreatedAtRoute("GetProduct", new { id = productToCreate.Id }, productToCreate);
}
这将返回一个位置标头:http://localhost:5000/$15003
尝试2
[HttpPost]
[ProducesResponseType(typeof(Produkt), 200)]
public IActionResult CreateNewProduct([FromBody] ProduktDtoForCreate productFromBody)
{
//...
return Created(new Uri($"{Request.Path}/{productToCreate.Id}", UriKind.Relative), productToCreate);
}
这个可以工作并返回/api/v1.0/produkte/16004,但是似乎不需要使用当前请求来指向新的位置。另外我不确定这是否是一个好的做法?