CreatedAtAction () не может найти маршрут с соответствующими параметрами

Я пытаюсь вернуть результат CreatedAtAction() из ApiController «NotUnitsController», который указывает маршрут на отдельном ApiController «UnitsController».

Все работает, как ожидалось, пока не будет получен ответ CreatedAtAction(). Я получаю сообщение об ошибке:

System.InvalidOperationException: ни один маршрут не соответствует предоставленным значениям.

Я не уверен, что мне не хватает. Я попытался решить проблему следующим образом:

  • Проверено написание параметров маршрута на обоих контроллерах
  • Попытка предоставить имя маршрута для [HttpGet] в UnitsController и ссылку на это имя из NotUnitsController.
  • Добавлен / к маршруту [HttpGet("/{unitKey}")], как предложено в этом ответе.

Часть маршрутов v1 жестко запрограммирована. Я обнаружил, что это может быть проблема с динамическим управлением версиями маршрута в этой проблеме GitHub .

Я также могу выполнять запросы GET к конечной точке UnitsController. Только ответ CreatedAtAction() не работает.

Вот фрагменты двух рассматриваемых контроллеров.

NotUnitsController:

[ApiController]
[Route("v1/not-units/{notUnitsKey:guid}/units")]
public class NotUnitsController : ControllerBase
{
    [HttpPost]
    public async Task<IActionResult> Post(Guid notUnitsKey, Input unitInput)
    {
        // TODO: Create Unit
        var unitKey = Guid.NewGuid();

        return CreatedAtAction(actionName: nameof(UnitsController.Get),
                               controllerName: nameof(UnitsController),
                               routeValues: new { unitKey },
                               value: new { unitKey });
    }
}

UnitsController:

[ApiController]
[Route("v1/units")]
public class UnitsController : ControllerBase
{
    [HttpGet("{unitKey:guid}")]
    public async Task<IActionResult> Post(Guid unitKey)
    {
        // TODO: Get Unit by key
        var unit = $"My Unit with Id: {unitKey}";
        return Ok(unit);
    }
}

Любая помощь будет принята с благодарностью.


person Matt Hensley    schedule 16.04.2020    source источник


Ответы (1)


Вероятно, вам следует использовать nameof(UnitsController.Post) как значение actionName и new { unitKey = unitKey } как значение routeValues в вашем CreatedAtAction ответе.

person msandoval    schedule 13.10.2020