Проблема с несколькими controllerами с таким же именем в моем проекте

Я запускаю следующую ошибку с моим проектом ASP.NET MVC 3:

Было найдено несколько типов, которые соответствуют controllerу с именем «Главная». Это может произойти, если маршрут, обслуживающий этот запрос («Главная / {действие} / {id}»), не определяет пространства имен для поиска controllerа, который соответствует запросу. Если это так, зарегистрируйте этот маршрут, вызвав перегрузку метода «MapRoute», который принимает параметр «namespaces».

В запросе «Home» были найдены следующие совместимые controllerы: MyCompany.MyProject.WebMvc.Controllers.HomeController MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController

У меня есть HomeController в моей папке controllerа по умолчанию, с именем classа MyCompany.MyProject.WebMvc.Controllers.HomeController.

Мой метод RegisterRoutes в моем global.asax выглядит так:

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 } // Parameter defaults ); } 

Затем у меня есть область под названием «Компания» с HomeController в папке controllerа по умолчанию для этой области с именем classа MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController.

Метод RegisterArea в файле CompanyAreaRegistration выглядит так:

  public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "Company_default", "Company/{controller}/{action}/{id}", new { area = "Company", action = "Index", id = UrlParameter.Optional } ); } 

Это все приводит к ошибке, которую я выделил в начале этого сообщения. Я изо всех сил пытаюсь объединить решение из разных других сообщений, без УДАЧИ .

Возможно ли иметь HomeController в папке controllerов по умолчанию, а затем в любой области? Если это так, мне нужно сделать (при условии, что сделаю) изменения в файле конфигурации, чтобы сделать эту работу?

Любая помощь приветствуется!

Сообщение об ошибке содержит рекомендуемое решение: «Если это так, зарегистрируйте этот маршрут, вызвав перегрузку метода« MapRoute », который принимает параметр« пространства имён ».

 routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults new string[] { "MyCompany.MyProject.WebMvc.Controllers"} ); 

Это приведет к тому, что http: // server / перейдите к вашему указателю HomeController Index, который, я думаю, вам нужен. http: // server / company / home перейдет в действие индекса HomeController в области Company, как определено в регистрации области.

Это подход asp.net mvc4:

  routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "RegisterNow", id = UrlParameter.Optional }, namespaces: new[] { "YourCompany.Controllers" } ); 

Я переименовал пространства имен, так что я удаляю только папки bin и obj и перестраиваю , снова работаю.

Еще одна вероятная причина этого вопроса может быть найдена ниже:

Было найдено несколько типов, которые соответствуют controllerу с именем «Главная»,

использовать это

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

Используйте только название проекта:

 Public Class RouteConfig Public Shared Sub RegisterRoutes(ByVal routes As RouteCollection) routes.IgnoreRoute("{resource}.axd/{*pathInfo}") routes.MapRoute( _ name:="Default", _ url:="{controller}/{action}/{id}", _ defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _ , namespaces:={"MvcAreas"}) End Sub 

Если вы используете RazorGenerator, просто указать параметр namespaces может быть недостаточно.

Я должен решить добавить заявление, указанное ниже в Global.asax.cs :

  protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); ControllerBuilder.Current.DefaultNamespaces.Add("MyProject.Controllers"); // This one } 

Поскольку Chris Moschini упоминает параметр namespaces, может быть недостаточно, если у вас есть две области с одним и тем же именем controllerа с разными пространствами имен, а по умолчанию ни один маршрут не возвращает 500 ошибок сервера.

 routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults new string[] { "MyCompany.MyProject.WebMvc.Controllers"} ); 

«Лучше» переопределить обработчик маршрута по умолчанию и добавить эту строку:

 RequestContext.RouteData.DataTokens["UseNamespaceFallback"] = false; 
  • С трудом использовать ASP.NET MVC ViewBag и DropDownListfor
  • Как получить доступ к имени / значению объекта JSON?
  • Как я могу переопределить шаблон @ Html.LabelFor?
  • Отправить массив объектов через JSON для ASP.Net MVC3
  • Действие Изображение MVC3 Razor
  • Метод Razor ViewEngine HTML.Checkbox создает скрытый ввод. Зачем?
  • Как визуализировать DateTime в определенном формате в ASP.NET MVC 3?
  • Можно ли получить доступ к объекту MVC ViewBag из файла Javascript?
  • Замок Виндзорский резольвер для MVC 3
  • Как очистить cookies с помощью asp.net mvc 3 и c #?
  • Как реализовать пользовательский атрибут Authorize для следующего случая?
  • Interesting Posts

    «Недопустимый файл подписи» при попытке запустить .jar

    Получение размера malloc только с возвращенным указателем

    Коллекция карт JPA из Enums

    Ломать имена локальных узлов в Mac OS X Yosemite

    Как переключить таблицу стилей CSS с помощью jQuery?

    Как хранить токен в локальном или сеансовом хранилище в Угловом 2?

    Повторите последнюю команду, соответствующую «двум словам» zsh

    Может ли анонимный class C # реализовать интерфейс?

    Форматировать нижние колонтитулы с полями L / R И сохранить последовательную нумерацию страниц между повернутыми страницами

    MSDeploy пропускает правила при использовании MSBuild PublishProfile с Visual Studio 2012

    Автоматическое распределение полосы пропускания на основе приложений в Windows?

    Несколько веб-серверов за одним общедоступным IP-адресом

    Любой хороший способ получить новый шрифт Menlo в Windows?

    Загрузить значение измерения из res / values ​​/ dimension.xml из исходного кода

    Проверка орфографии для docbook

    Давайте будем гением компьютера.