Маршруты по умолчанию ASP.NET MVC, доступные через area routes

) Пока (для краткости) у меня зарегистрирован один маршрут в 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".

» Есть ли способ предотвратить это?

Спасибо.

9
задан Yannick Blondeau 25 July 2012 в 09:09
поделиться