Маршрутизация ASP.NET Core 2.1 - CreatedAtRoute - ни один маршрут не соответствует заданным значениям - PullRequest
0 голосов
/ 28 августа 2018

У меня следующая ситуация

[Route("api/[controller]")]
[ApiController]
public class FooController: ControllerBase
{
    [HttpGet("{id}", Name = "GetFoo")]
    public ActionResult<FooBindModel> Get([FromRoute]Guid id)
    {
        // ...
    }
}

[Route("api/[controller]")]
[ApiController]
public class Foo2Controller: ControllerBase
{

    [HttpPost("/api/Foo2/Create")]
    public ActionResult<GetFooBindModel> Create([FromBody]PostFooBindModel postBindModel)
    {
        //...
        return CreatedAtRoute("GetFoo", new { id = getBindModel.Id }, getBindModel);

    }
}

PS: getBindModel - это экземпляр типа GetFooBindModel. И я получаю

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

Я также попытался изменить строку

return CreatedAtRoute("GetFoo", new { id = getBindModel.Id }, getBindModel);

до

return CreatedAtRoute("api/Foo/GetFoo", new { id = getBindModel.Id }, getBindModel);

но все та же ошибка.

1 Ответ

0 голосов
/ 28 августа 2018

Сопоставьте имя метода действия (Get) в FooController с именем маршрута в атрибуте HttpGet. Вы можете использовать ключевое слово nameof в c #:

[HttpGet("{id}", Name = nameof(Get))]
public ActionResult<FooBindModel> Get([FromRoute]Guid id)
{
          ...
}

, а также вместо жесткого кодирования имени маршрута используйте nameof снова:

return CreatedAtRoute(nameof(FooController.Get), new { id = getBindModel.Id }, getBindModel);

и попробуйте еще раз;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...