私のapiを消費者に新しく作成されたオブジェクトの場所について知らせたいと思います。私はCreated()
CreatedAtRoute()
とCreatedAtAction()
があることを知っていますが、私はそれを使用する方法がわかりません。asp net core apiでCreated(またはCreatedAtAction/CreatedAtRoute)を使用する方法
を私が指し示すしたい先の取得リソースを持っている:ここでは
は、私が試したものです。これは、入力として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
試みこの1作品と/api/v1.0/produkte/16004を返しますが、それはすべきではない、新しい場所を指すように、現在の要求を使用してのように思える2
[HttpPost]
[ProducesResponseType(typeof(Produkt), 200)]
public IActionResult CreateNewProduct([FromBody] ProduktDtoForCreate productFromBody)
{
//...
return Created(new Uri($"{Request.Path}/{productToCreate.Id}", UriKind.Relative), productToCreate);
}
必要です。これが良い練習であるかどうかもわかりません。
ありがとうございました。
また、CreateNewProductメソッドのProducesResponseType注釈に、200ではなく201の戻りコードを指定する必要があります。 –
ありがとう、Graham!私はCreatedAtメソッドにとても集中していました。私はGetメソッドでばかげたミスを犯しました:)素晴らしい2018年 – Riscie