Пока (для краткости) у меня есть один маршрут в global.asax, зарегистрированный так:
routes.Add(new LowercaseRoute("{action}/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { controller = "Home", action = "Index", id = UrlParameter.Optional }),
DataTokens = rootNamespace
});
Где rootNamespace
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
тоже работает. В области «admin» нет «домашнего» контроллера с действием «contact». Он извлекает нужную страницу из "/ contact", но с URL-адресом "/admin/home/contact".
Есть ли способ предотвратить это?
Спасибо.