CreatedAtRoute приводит к пустой ссылке
Somewhy CreatedAtRoute приводит правильный код 201 в объекте CreatedAtRoute, но 500 кодов ошибок в ответе почтальона.
яv read most of CreatedAtRoute questions and allready tryed several solutions - but seems that none work for me (or i
Я все еще делаю что-то не так).
//Get single method
[Route("{id}")]
[ProducesResponseType(typeof(WorkerDTO), 200)]
[ProducesResponseType(typeof(WorkerDTO), 400)]
public IActionResult GetSingleWorker(int id)
{
Worker workerFromRepo = _workerRepository.GetSingle(id);
if (workerFromRepo == null)
{
return NotFound();
}
return Ok(Mapper.Map<WorkerDTO>(workerFromRepo));
}
//Post method
[HttpPost]
[ProducesResponseType(typeof(WorkerDTO), 201)]
[ProducesResponseType(typeof(WorkerDTO), 400)]
public IActionResult AddWorker([FromBody]WorkerCreateDTO workerCreateDTO)
{
if (workerCreateDTO == null)
{
return BadRequest("Worker Object is null");
}
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
Worker toAdd = Mapper.Map<Worker>(workerCreateDTO);
_workerRepository.Add(toAdd);
bool result = _workerRepository.Save();
if (!result)
{
throw new Exception("Failed to add Worker");
}
//returns good 201 code but somewhy fails to link the uri(
//var tst = CreatedAtRoute("GetSingleWorker" , new { id = toAdd.Id }, Mapper.Map<Worker>(toAdd));
//return CreatedAtRoute("GetSingleWorker" , new { id = toAdd.Id }, Mapper.Map<Worker>(toAdd));
return CreatedAtRoute(
routeName: "GetSingleWorker",
routeValues: new { id = toAdd.Id },
value: Mapper.Map<Worker>(toAdd));
}
Предполагается получить модель 201 и DTO в результате. На самом деле получается код 201 в объекте tst, но нет получающегося маршрута и ошибка 500 в почтальоне. "Произошло необработанное исключение при обработке запроса. InvalidOperationException: ни один маршрут не соответствует предоставленным значениям".
1 ответ
Я идиот, извини всех. В asp.net Core кажется, что вам нужно указать имя для маршрута, чтобы ссылаться на него, вместо ссылки на имя метода), поэтому добавление атрибута Name в CreatedAtRoute сделало свое дело)
[HttpGet]
[Route("{id}", Name = "GetSingleWorker")]
После добавления тех - возвращает прекрасный заголовок, URL и объект модели:)