У меня есть сайт MVC 4 с определенными обычными маршрутами по умолчанию (включая маршрут API), а также область для функций администрирования, у которой есть свой собственный маршрут. Конфигурация маршрутизации выглядит так:
Маршрут по умолчанию:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MyProject.Controllers" }
);
Маршрут API по умолчанию:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Маршрут админки (в коде регистрации зоны):
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MyProject.Areas.Admin.Controllers" }
);
Кроме того, в области администрирования есть собственная страница макета для представлений.
Все маршруты для основного сайта работают правильно (включая HTTP-маршруты для контроллеров API), но маршруты для области администратора демонстрируют странное поведение. Запросы к домашнему контроллеру в области администрирования выполняются успешно, а запросы к другим контроллерам в области администрирования - нет. Ошибка, которую я получаю,
System.Web.HttpException: The controller for path '/admin/concerts' was not found or does not implement IController.
Интересно то, что трассировка стека, связанная с исключением, содержит код с главной страницы макета, а не страницы макета области администрирования, что, как мне кажется, предполагает, что запрос был направлен на маршрут по умолчанию, а не на маршрут администратора.
Я пробовал отлаживать конфигурацию маршрута с помощью Glimpse, но мне не очень повезло, кроме подтверждения с помощью второго носителя, что маршрут работает правильно для HomeController области администрирования, но не для других контроллеров в этой области.
Обновление:
У меня определены следующие соответствующие контроллеры:
- Маршрут по умолчанию:
-
MyProject.Controllers.ConcertsController
-
MyProject.Controllers.HomeController
- (Некоторые другие, здесь не актуальны.)
-
- Маршрут HTTP по умолчанию:
- только
MyProject.Controllers.Api.ConcertsController
- только
- Маршрут админки:
-
MyProject.Areas.Admin.Controllers.ConcertsController
; и - только
MyProject.Areas.Admin.Controllers.HomeController
-
1 ответ
Оказалось, что это вовсе не проблема маршрутизации, а проблема с определениями представлений: каждое из представлений ConcertsController включало оператор Layout, указывающий представление на Layout для основного сайта.
Похожие вопросы
Новые вопросы
asp.net-mvc
ASP.NET MVC Framework - это платформа и инструмент веб-приложений с открытым исходным кодом, которые реализуют версию шаблона модель-представление-контроллер (MVC), адаптированную к веб-приложениям и построенную на основе технологии ASP.NET.