ASP. NET MVC - конфликты нескольких контроллеров в одном решении - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть два веб-проекта в одном решении, первый запускается, а второй выдает ошибку:

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

Я указываю, что:

  • Два проекта имеют разные пространства имен (Intr anet / Extr anet).
  • Два проекта полностью независимы.
  • Два проекта не ссылаются друг на друга.
  • Я НЕ хочу добавлять зону.
  • Два проекта (в разработке), размещенный на моем локальном IIS, каждое с другим доменным именем (intr anet .lan / extr anet .lan).

Я не понимаю, как сказать Visual Студия не смотреть в других проектах. Такое поведение действительно ненормально, я думаю, что это ошибка или очень плохая стратегия проектирования.

Я также предполагаю, что прочитал много постов, посвященных этой теме, даже не найдя ответа. Каждый создает область (я не хочу, потому что это не «чистое» создание области в проекте только для проекта, что-то совершенно глупое и нелогичное).

Если кто-то может мне помочь, это будет очень приятно.

Редактировать:

Я помещаю свой проект Extr anet в отдельную директорию, создаю новое решение и добавляю его. Я настраиваю его для запуска под IIS Express, и он также сообщает мне, что находит два контроллера. Это Intr anet и Extr anet. Однако Ctrl + F с "Intr anet" в проекте extr anet не дает результатов. Я также открыл файл проекта и решения и не могу найти ссылку на Intr anet. Невероятно, но проект Intr anet, похоже, связан с extr anet, но без каких-либо ссылок или понятий в коде. Даже после перестройки проекта.

Edit2:

Я пытался с

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

Или

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

Но без эффекта.

1 Ответ

0 голосов
/ 26 февраля 2020

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

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

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

Но очистки и регенерации раствора недостаточно. Также было необходимо удалить содержимое bin / obj и заново создать проект. Я сообщил об этой ошибке в Microsoft, потому что искал часами из-за нее. У меня была уверенность в очистке проекта, я не должен был.

Было найдено несколько типов, которые соответствуют контроллеру с именем 'Account'. MVC 4 & использование RouteConfig.CS

Большое спасибо @ tno2007

...