Я поместил все свои контроллеры администратора в папку администратора в папке контроллера
Ну, это твоя проблема. Как вы ожидаете, что фабрика контроллеров по умолчанию узнает, какой контроллер вы хотите создать при следующем запросе /admin/index
(тот, что находится в папке «Контроллеры» или включен в папке «Контроллеры / Администратор»)? Помните, что фабрика контроллеров по умолчанию ищет типы в загруженных сборках, производных от контроллера. Это действительно не волнует, в какой папке они были объявлены. Поэтому, когда он обнаруживает, что у вас есть 2 контроллера с одинаковым именем, он не знает, какой из них выбрать.
Одна из возможностей - использовать Области. Тогда вы могли бы указать пространства имен при регистрации маршрута:
routes.MapRoute(
"",
"Admin/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new[] { "AppName.Areas.Admin.Controllers" }
);
Также в вашем Global.asax убедитесь, что вы указали пространство имен для контроллеров без области:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new[] { "AppName.Controllers" }
);