ASP.NET MVC-Standard-Routen zugänglich über den Bereich Routen

Bisher (aus Platzgründen) habe ich eine route in der global.asax registriert wie dieses:

routes.Add(new LowercaseRoute("{action}/{id}", new MvcRouteHandler())
  {
    Defaults = new RouteValueDictionary(new { controller = "Home", action = "Index", id = UrlParameter.Optional }),
    DataTokens = rootNamespace
  }); 

Wo "rootNamespace" ist

var rootNamespace = new RouteValueDictionary(new { namespaces = new[] { "MyApp.Web.Controllers" } });

LowercaseRoute erbt von der Route und macht einfach alle Pfade in Kleinbuchstaben. Ich habe auch ein Gebiet, das registriert, wie diese:

context.Routes.Add(new LowercaseRoute("admin/{controller}/{action}/{id}", new MvcRouteHandler())
  {
    Defaults = new RouteValueDictionary(new { action = "List", id = UrlParameter.Optional }),
    DataTokens = adminNamespace
  });

Wo adminNamespace ist ein weiterer namespace, gleiche Idee wie in der default-route, aber mit den richtigen namespace. Dies funktioniert gut, ich kann Zugriff auf URLs, die wie folgt Aussehen:

http://example.com/contact  <- default route, "Home" controller
http://example.com/admin/account  <- area route, "Account" controller, default "List" action

Das problem ist, dass diese

http://example.com/admin/home/contact

funktioniert auch. Es gibt keinen "home" - controller mit einer "Kontakt" - Aktion unter dem "admin" - Bereich. Es zieht sofort die passende Seite aus "/Kontakt", aber mit URL "/admin/home/Kontakt".

Gibt es eine Möglichkeit dies zu verhindern?

Dank.

InformationsquelleAutor pbz | 2011-01-06
Schreibe einen Kommentar