Ich möchte Verbraucher meiner API über den Speicherort des neu erstellten Objekts informieren. Ich weiß, dass es Created()
CreatedAtRoute()
und CreatedAtAction()
gibt, aber ich bin unsicher, wie man es benutzt. HierWie zu verwenden Created (oder CreatedAtAction/CreatedAtRoute) in einem ASP Net-Core-API
ist, was ich versucht habe:
Ich habe ein Get Ressource, die Ich mag würde zeigen. Es dauert eine ID als Eingabe:
[HttpGet("/${id}", Name = "GetProduct")]
[ProducesResponseType(typeof(Produkt), 200)]
public IActionResult Get([FromRoute] int id)
{
// some code...
return Ok(...);
}
Wenn ein Produkt über meine POST Route erstellt wird, ich möchte über den Location-Header auf diese Ressource verweisen:
Versuch 1
[HttpPost]
[ProducesResponseType(typeof(Produkt), 200)]
public IActionResult CreateNewProduct([FromBody] ProduktDtoForCreate productFromBody)
{
//...
return CreatedAtRoute("GetProduct", new { id = productToCreate.Id }, productToCreate);
}
Dies gibt einen Location-Header von: http://localhost:5000/ $ 15003
Versuch 2
[HttpPost]
[ProducesResponseType(typeof(Produkt), 200)]
public IActionResult CreateNewProduct([FromBody] ProduktDtoForCreate productFromBody)
{
//...
return Created(new Uri($"{Request.Path}/{productToCreate.Id}", UriKind.Relative), productToCreate);
}
Dies funktioniert und gibt /api/v1.0/produkte/16004 aber es scheint, wie die aktuelle Anforderung an den neuen Standort Punkt benutzen, soll nicht sein erforderlich. Auch ich bin mir nicht sicher, ob das eine gute Praxis ist?
Danke für jede Hilfe.
Ich würde auch hinzufügen, dass Ihre ProducesResponseType-Annotation für die CreateNewProduct-Methode einen Rückgabecode 201 und nicht 200 angeben sollte. –
Danke Graham! Ich war so auf die CreatedAt-Methode konzentriert, dass ich einen dummen Fehler in meiner Get-Methode gemacht habe :) Have a great 2018 – Riscie