Asp.net MVC Routing-mehrdeutig, zwei Pfade für gleiche Seite
-
09-06-2019 - |
Frage
Ich versuche, ASP.NET MVC Routing und haben natürlich auf ein Problem gestoßen. Ich habe einen Abschnitt, / Admin / Pages /, und dies ist auch erreichbar über / Pages /, die es nicht sollte. Was könnte ich fehlen?
Der Routing-Code in global.asax:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Pages", // Route name
"Admin/Pages/{action}/{id}", // URL with parameters
// Parameter defaults
new { controller = "Pages", action = "Index", id = "" }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
// Parameter defaults
new { controller = "Home", action = "Index", id = "" }
);
}
Danke!
Lösung
Ich würde vorschlagen, eine explizite Route für / Pages / Anfang hinzugefügt wird.
Das Problem ist, dass es von der Standardroute behandelt Sein und Ableitung:
controller = "Seiten" action = "Index" id = ""
das ist genau die gleiche wie die Parameter für Ihre Admin-Route.
Andere Tipps
Für Routing-Probleme wie diese, sollten Sie meinen Strecke ausprobieren Debugger Baugruppe (nur in Prüfung). Es kann helfen, diese Art von Problemen herauszufinden.
P. S. Wenn Sie versuchen, die Seiten-Controller zu sichern, stellen Sie sicher, dass die [autorisieren] Attribut zu verwenden. Verlassen Sie sich nicht nur auf die URL-Autorisierung.
Sie könnten ein Hindernis für die Standardregel hinzuzufügen, so dass der {Steuerung} Tag nicht sein kann „Seiten“.
Sie müssen Sie erste Route {Aktion} Token / Parameter, die mit der Einstellung von Standardaktion in Konflikt kommt. Versuchen Sie, Parameternamen in Ihrer Route oder Standardaktion Namen entfernen.