Несколько контроллеров с одним именем в ASP.NET MVC 2 - PullRequest
12 голосов
/ 13 апреля 2010

При попытке запустить приложение ASP.NET MVC появляется следующая ошибка:

В запросе «Аккаунт» найдены следующие подходящие контроллеры: uqs.Controllers.Admin.AccountController MvcApplication1.Controllers.AccountController

Я искал в проекте MvcApplication1.Controllers.AccountController, чтобы удалить его, но не могу найти совпадения.

Я пытаюсь зарегистрировать маршрут, чтобы исправить это:

 routes.MapRoute(
     "LogAccount", // Route name
     "{controller}/{action}/{id}", // URL with parameters
     new { controller = "Account", action = "LogOn", id = "" },
     new string[] { "uqs.Controllers.Admin" } // Parameter defaults
 );

но это не помогло.

Найдено несколько типов, соответствующих контроллер с именем «Аккаунт».

Как я могу решить эту проблему?

Ответы [ 6 ]

61 голосов
/ 13 мая 2010

Если вы реорганизуете свой проект и изменяете пространство имен и сборку по умолчанию с «MVCApplication1» на «uqs», в вашем каталоге bin может оказаться 2 сборки (новая и старая). Вы можете получить эту ошибку, потому что AccountController находится в обеих сборках.

Очистите каталог bin старого файла MVCApplication1.dll.

11 голосов
/ 13 апреля 2010

В вашем приложении не может быть более одного контроллера с именем Account, даже в разных пространствах имен.

Эти контроллеры необходимо разделить на Area (функция в ASP.NET MVC 2).

Если вы выполните поиск для AccountController, вы найдете все контроллеры с именем Account в вашем приложении; и переместите их в другое Areas, если хотите оба, или удалите одно.

4 голосов
/ 05 сентября 2012

Была такая же проблема. Почистил мусорное ведро, и мне было хорошо идти.

3 голосов
/ 12 апреля 2011

Слегка сбивающий с толку вариант проблемы (похожий в том смысле, что он вызывает одно и то же сообщение об ошибке) может возникнуть даже с предоставленными пространствами имен. MVC 3 Я думаю, что немного сложнее, чем MVC 2 на этом фронте.


Краткий ответ:

Убедитесь, что пространство имен вашего контроллера фактически является пространством имен, указанным в вызове MapRoute !!


Длинный ответ :

У меня есть 3 области: default ("") / Facebook / Store, и у каждой из них AdminController

У меня маршрут отображается следующим образом (для моей области по умолчанию):

routes.MapRoute(
     "Default",
     "{controller}/{action}/{id}",
     new { controller = "Gateway", action = "Index", id = UrlParameter.Optional },
     new string[] { "RR.Controllers.Main" }
);

Запрос к / admin дал следующую ошибку:

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

Запрос 'admin' нашел следующие соответствующие контроллеры:

RR.FacebookControllers.AdminController
RR.Controllers.AdminController
RR.StoreControllers.AdminController

Но подожди минутку! Разве я не указал пространство имен контроллера ....? Что происходит ....?

Оказалось, что пространство имен контроллера моей области по умолчанию было RR_MVC.Controller вместо Rolling_Razor_MVC.Controller.Main.

По какой-то причине в MVC 2 это не вызывало проблем, но в MVC 3 это дает. Я думаю, что MVC 3 просто требует от вас большей ясности, когда есть потенциальные неоднозначности.

0 голосов
/ 21 ноября 2011

У меня была эта проблема ...

Решено удалением ссылки на проект в одном из файлов .csproj

0 голосов
/ 13 апреля 2010

AccountController автоматически генерируется шаблоном ASP.NET MVC Visual Studio. Он расположен в Controllers\AccountController.cs. Попробуйте найти его в проекте и удалить.

...