Каждый раз, когда я создаю проект с областями, я изменяю свой маршрут Default
следующим образом:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // defaults
null, // constraints
new string[] { "MyApplication.Controllers" } // namespaces
);
Последний параметр ограничивает маршрут по умолчанию для контроллеров в пространстве имен MyApplication.Controllers
. Это гарантирует, что маршрут по умолчанию ограничен действиями за пределами любых областей.
UPDATE
После глубокого погружения в код я обнаружил, где возникает проблема, и нашел решение. Измените маршрут по умолчанию на следующий:
routes.Add(
"Default",
new Route("{controller}/{action}/{id}",
new RouteValueDictionary(
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
),
null,
new RouteValueDictionary(
new {
Namespaces = new string[] { "MyApplication.Controllers" },
UseNamespaceFallback = false
}
),
new MvcRouteHandler()
)
);
Ключ в добавлении токена UseNamespaceFallback
. Это предотвратит просмотр маршрута по умолчанию в любых других пространствах имен.
Это неожиданное поведение, и это была проблема, о которой я не знал, которая влияет на проект, над которым я работаю. Я перечислю это как проблему в aspnet.codeplex.com. Я бы не назвал это ошибкой, но поведение определенно нарушает правила маршрутизации MVC.