Несколько контроллеров с одним именем в ASP.NET MVC 2
-
26-09-2019 - |
Вопрос
Я получаю следующую ошибку при попытке запуска моего приложения 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
);
Но это не решило это.
Были обнаружены несколько типов, которые соответствуют контроллеру с именем «аккаунт».
Как я могу решить эту проблему?
Решение
Вы не можете иметь более одного контроллера с именем Account
В вашем приложении даже в разных пространствах имен.
Вы должны иметь эти контроллеры расщеплены Area
(Особенность в ASP.NET MVC 2).
Если вы проведете поиск для AccountController
Вы найдете все контроллеры по имени Account
в вашем приложении; и отодвинуть их в разные Areas
Если вы хотите оба из них или удалить один.
Другие советы
Если вы восстанавливаете свой проект и измените пространство имен по умолчанию и узел из «MVCApplication1» на «UQS», вы можете в конечном итоге с 2 сбоями в вашем каталоге Bin (новый и старый). Вы можете получить эту ошибку, потому что AccountController находится в обеих сборках.
Очистите каталог BIN старого MVCApplication1.dll.
Имел эту же проблему. Очистил мусорное ведро, и мне было хорошо, чтобы пойти.
Слегка запутанная вариация проблемы (аналогично тем, что она вызывает одинаковое сообщение об ошибке), может происходить даже с предоставленными пространствами имен. 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 просто требует, чтобы вы были более явными, когда есть потенциальные одобрения.
AccountController
автоматически генерируется шаблоном Studio Asp.net MVC Visual Studio. Это находится в Controllers\AccountController.cs
. Отказ Попробуйте в поисках этого в проекте и удалить его.
У меня была эта проблема ...
Решается путем удаления ссылки на проект в одном из файлов .csproj