До сих пор (для краткости) Я один маршрут в global.asax зарегистрирован как это:ASP.NET MVC маршруты по умолчанию, доступные через площадь маршрутов
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», но с URL-адресом «/ admin/home/contact».
Есть ли способ предотвратить это?
Спасибо.
Добавление «UseNamespaceFallback = false» в область администрирования Словарь DataTokens решил проблему. Благодаря! – pbz