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 и объект модели:)

Другие вопросы по тегам