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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werfen Sie einen Blick auf den code für AreaRegistrationContext.MapRoute:
Beachten Sie insbesondere die UseNamespaceFallback - token, die ist standardmäßig auf false festgelegt. Sie müssen haben eine ähnliche Logik, wenn Sie möchten, um die Suche einzuschränken, um die namespace. (Wahr = Suche in der aktuellen namespace für den controller, und nicht, dass die Suche in allen Namensräumen. False = Suche in der aktuellen namespace nur.)