Mam pytanie odnośnie odpowiedzi 404. Piszę tutorialowy projekt webapi i mam kontroler [ApiController], w którym jest endpoint /api/todos/{id} zwracający zasób o podanym id. Metoda wygląda jak poniżej.
[HttpGet("{id}")]
[Produces("application/json")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public ActionResult<TodoDto> Get([FromRoute] int id)
{
var todo = _context.Todos.FirstOrDefault(t => t.Id == id);
if (todo == null) return NotFound();
var todoDto = _mapper.Map<TodoDto>(todo);
return Ok(todoDto);
}
No i jak wejdę pod dobry endpoint dla zasobu, który nie istnieje np. /api/todos/999, to dostaję odpowiedź 404 z JSON.
A jak wejdę pod zły endpoint, którego nie ma w API np. /api/zly, to dostaję odpowiedź 404 bez JSON.
Nie rozumiem, to jest dobrze i tak domyślnie ma być? Co to jest traceId?
Czy da się zmienić by dla 404 zasób mieć JSON:
{
"type": "https://datatracker.ietf.org/doc/html/rfc7231#section-6.5.4",
"title": "Not Found",
"status": 404,
"message": "Resource :id not found"
}
a dla nieistniejących endpoint:
{
"type": "https://datatracker.ietf.org/doc/html/rfc7231#section-6.5.4",
"title": "Not Found",
"status": 404,
"message": "Endpoint :id not found"
}
No i pytanie czy używa się tych metod typu NotFound(), Ok(), BadRequest(), Created() czy może jest coś innego?