Найдено несколько типов, которые соответствуют контроллеру с именем "Home"

в настоящее время у меня есть два несвязанных проекта MVC3, размещенных в интернете.

один работает нормально, другой не работает, давая мне ошибку:

найдено несколько типов, которые соответствуют контроллеру с именем "Home". Этот может произойти, если маршрут, который обслуживает этот запрос ('{controller} / {action} / {id}') не указывает пространства имен для поиска для контроллера, который соответствует запросу.

Если это так, зарегистрируйте этот маршрут, вызвав перегрузка метода MapRoute это принимает параметр "namespaces".

мой хостер работает так, что он дает мне FTP-доступ, и в этой папке у меня есть две другие папки, по одной для каждого из моих приложений.

ftpFolderA2 / foo.com

ftpFolderA2 / bar.com

foo.com отлично работает, я публикую свое приложение в локальной файловой системе, затем FTP-содержимое, и оно работает.

когда я загружаю и пытаюсь запустить bar.com, проблема выше пожаров и мешает мне использовать мой сайт. все время foo.com все еще работает.

Is bar.com поиск с контроллеров везде внутри ftpFolderA2, и именно поэтому он находит другой HomeController? Как я могу сказать, чтобы он только смотрел в папке контроллера, как должен?

факты:

  1. не использовать области. Это два совершенно не связанных между собой проекта. Я помещаю каждый опубликованный проект в каждую соответствующую папку. Ничего особенного.
  2. каждый проект имеет только 1 HomeController.

может кто-нибудь подтвердить, что это проблема?

3 ответов


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

  • ~/Controllers/HomeController.cs
  • ~/Areas/Admin/Controllers/HomeController.cs

чтобы решить эту проблему (как предлагает сообщение об ошибке), вы можете использовать пространства имен при объявлении маршрутов. Итак, в определении основного маршрута в Global.asax:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new[] { "AppName.Controllers" }
);

и в ~/Areas/Admin/AdminAreaRegistration.cs:

context.MapRoute(
    "Admin_default",
    "Admin/{controller}/{action}/{id}",
    new { action = "Index", id = UrlParameter.Optional },
    new[] { "AppName.Areas.Admin.Controllers" }
);

если вы не используете области, кажется, что ваши оба приложения размещены внутри одного и того же ASP.NET приложения и конфликты возникают из-за того, что одни и те же контроллеры определены в разных пространствах имен. Вам нужно будет настроить IIS для размещения этих двух как отдельных ASP.NET приложения, если вы хотите избежать такого рода конфликтов. Если у вас нет доступа к серверу, обратитесь к хостинг-провайдеру.


вот еще один сценарий, где вы можете столкнуться с этой ошибкой. Если вы переименуете свой проект так, чтобы имя файла сборки изменилось, возможно, у вас будет две версии вашего ASP.NET сборка, которая будет воспроизводить эту ошибку.

решение состоит в том, чтобы перейти к вашему и удалить старые библиотеки DLL. (Я попытался "перестроить проект", но это не удалило их, поэтому обязательно проверьте bin чтобы убедиться, что они ушли)


в MVC4 & MVC5 это немного отличается, используйте следующие

/ App