Было найдено несколько типов, которые соответствуют контроллеру с именем «Home» - в двух разных областях - PullRequest
14 голосов
/ 09 января 2012

У меня есть две области в моем проекте. Теперь, когда я запускаю программу, я получаю эту ошибку:

Multiple types were found that match the controller named 'Home'. This can happen if the route that services this request ('{controller}/{action}/{id}') does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the 'MapRoute' method that takes a 'namespaces' parameter.

The request for 'Home' has found the following matching controllers:
BaseAdminMVC.Areas.BaseAdmin.Controllers.HomeController
BaseAdminMVC.Areas.TitomsAdmin.Controllers.HomeController  

Я нашел некоторый источник здесь: Имя нескольких контроллеров
Но я думаю, что это работает только для одной области.
В моем случае у меня есть два проекта в разных областях. Надеюсь, что кто-то может сказать, что я должен сделать, чтобы решить эту проблему.
Вот файл Global.asax:

public static void RegisterRoutes(RouteCollection routes)
        {
            string[] namespaces = new string[] { "BaseAdminMVC.Areas.BaseAdmin.Controllers", "BaseAdminMVC.Areas.TitomsAdmin.Controllers"};

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                namespaces
            );
        }  

Кстати, у меня также есть контроллер ("HomeController") вне папки Area. Это просто ссылки на два проекта BaseAdmin и TitomsAdmin.

Я пробовал это решение, но все же не работает :

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

            routes.MapRoute(
                "BaseAdmin",
                "BaseAdmin/{controller}/{action}",
                new { controller = "Account", action = "Index" },
                new string[] { "BaseAdminMVC.Areas.BaseAdmin.Controllers" }
            );

            routes.MapRoute(
                "TitomsAdmin",
                "TitomsAdmin/{controller}/{action}",
                new { controller = "Home", action = "Index" },
                new string[] { "BaseAdminMVC.Areas.TitomsAdmin.Controllers" }
            );

Заранее спасибо !!

Ответы [ 3 ]

18 голосов
/ 10 января 2012

Я не знаю, что произойдет, но этот код работает нормально:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        new string[] { "BaseAdminMVC.Areas.TitomsAdmin.Controllers" }
    );
}
7 голосов
/ 30 сентября 2016

Я получил эту ошибку после переименования пространства имен / сборки моего проекта.

Если вы переименовали пространство имен / сборку, у вас может быть оставшаяся сборка / dll из предыдущего имени в папке bin. Просто удалите его оттуда, и он должен работать.

2 голосов
/ 28 ноября 2016

Щелкните правой кнопкой мыши проект и выберите «Очистить проект».Или же полностью очистите каталог bin и затем пересоберите заново.Это должно исключить любые оставшиеся сборки

...