Найдено несколько типов контроллеров, соответствующих URL в приложении mvc - PullRequest
0 голосов
/ 11 декабря 2018

У меня странная ошибка при использовании атрибутной маршрутизации со следующими двумя контроллерами:

[Route("{action=Index}")]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

[RoutePrefix("search")]
[Route("{action=Index}")]
public class SearchController : Controller
{
    public ActionResult Index(string searchTerm)
    {
        return View();
    }
}

И в конфигурации маршрута:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();

Как видите, второй контроллер долженесть префикс поиска

Однако, если я захожу в dev.local / search? searchterm = test

Я получаю сообщение об ошибке

Запрос обнаружил следующеесоответствующие типы контроллеров: Marshalls.WebComponents.Web.Controllers.SearchController Marshalls.WebComponents.Web.Controllers.HomeController

Если я удаляю [Route("{action=Index}")] из homecontroller, он будет работать нормально, но тогда яне могу попасть на домашнюю страницу, используя http://dev.local/

Этого раньше не было и обычно все работает нормально, поэтому мне интересно, может ли кто-нибудь заметить что-то очевидное, что я испортил

1 Ответ

0 голосов
/ 11 декабря 2018

Добавьте RoutePrefix для HomeController и переместите маршрут из контроллера в методы / действия.

Пустая строка в атрибутах Route и RoutePrefix означает, что этот контроллер или действие используется по умолчанию.

http://dev.local/ => Действие HomeController и Index

http://dev.local/search?searchTerm=123 => Действие SearchController и Index

Имейте в виду, что только один контроллер может иметь пустой RoutePrefix и только одно действие в контроллере можетесть пустой маршрут

[RoutePrefix("")]
public class HomeController : Controller
{
    [Route("")]
    public ActionResult Index()
    {
        return View();
    }
}

[RoutePrefix("search")]
public class SearchController : Controller
{
    [Route("")]
    public ActionResult Index(string searchTerm)
    {
        return View();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...