) Пока (для краткости) у меня зарегистрирован один маршрут в global.asax вот так:
routes.Add(new LowercaseRoute("{action}/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { controller = "Home", action = "Index", id = UrlParameter.Optional }),
DataTokens = rootNamespace
});
Где "rootNamespace" is
var rootNamespace = new RouteValueDictionary(new { namespaces = new[] { "MyApp.Web.Controllers" } });
LowercaseRoute наследуется от Route и просто делает все пути строчными буквами. У меня также есть область, зарегистрированная следующим образом:
context.Routes.Add(new LowercaseRoute("admin/{controller}/{action}/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { action = "List", id = UrlParameter.Optional }),
DataTokens = adminNamespace
});
Где adminNamespace - другое пространство имен, та же идея, что и в маршруте по умолчанию, но с правильным пространством имен. Это работает нормально, я могу получить доступ к URL-адресам, которые выглядят следующим образом:
http://example.com/contact <- default route, "Home" controller
http://example.com/admin/account <- area route, "Account" controller, default "List" action
Проблема в том, что этот
http://example.com/admin/home/contact
также работает. Нет «домашнего» контроллера с действием «контакт» в области «администратора». Он извлекает нужную страницу из «/ contact», но с URL-адресом «/admin/home/contact".
» Есть ли способ предотвратить это?
Спасибо.