Запрос соответствует нескольким действиям, что приводит к неоднозначности действий с разными параметрами в ASP.NET 5/MVC 6.

У меня есть простой маршрут в моем проекте:

routes.MapRoute(
      name: "api",
      template: "api/{controller}/{action}");

В моем контроллере у меня есть два действия:

    [HttpGet]
    public string Get(string value)
    {
        return value;
    }

    [HttpGet]
    public string Get(int id)
    {
        return id.ToString();
    }

Теперь, когда я пытаюсь сделать URL-адрес типа api/controller/get?id=1, он не работает, потому что фреймворк не может различить два действия. Насколько я помню, это работало довольно хорошо в обычном веб-API, потому что очевидно, что этот URL-адрес соответствует только одному из действий, основанных на его параметре. Я сделал что-то не так или это не поддерживается в новом MVC6?


person Ilya Chernomordik    schedule 15.12.2015    source источник


Ответы (1)


Я сделал что-то не так или это не поддерживается в новом MVC6?

Селектор действий MVC не учитывает параметры действия во время выбора действия. Поэтому у вас не может быть двух действий, соответствующих одному шаблону маршрута. За исключением, например, действий, имеющих разные ограничения действия (HttpPost, HttpGet).

Выберите логику действий в коде.

Теоретически выбранная логика между некоторыми действиями на основе параметров должна быть в методе SelectBestActions, но ничего не делает

person Stas Boyarincev    schedule 15.12.2015
comment
Значит, это ограничение нового фреймворка MVC 6? - person Ilya Chernomordik; 15.12.2015
comment
@IlyaChernomordik, честно говоря, я не помню, как это было в старой версии. - person Stas Boyarincev; 15.12.2015