Benutzerdefinierte IRouteHandler Route vermasselt MVC Link Building
-
08-10-2019 - |
Frage
Ich habe einen benutzerdefinierten routehandler in ASP.NET MVC2 alle wie dies bei einem vorher festgelegten Pfad der URL zu fangen:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new Route("@api/{*all}", new ApiHandler()));
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Routing funktioniert gut, aber wenn ich verwende Html.ActionLink oder Rückgabe ReturnToAction () von einem Controller, baute die uri schafft ein gebrochenes uri wie folgt aus:
/@api?action=Add&controller=Home
statt
/Home/Add
Wie kann ich die uri Gebäude Logik beeinflussen die Standardroute Muster zu beachten?
Lösung
Ich habe mit einem Hack gekommen, um das beschriebene Verhalten zu stoppen. Während dieses „löst“ das Problem, es ist wirklich Art von fiesen und ich würde einen sauberere Weg bevorzugt den Weg vom virtuellen Pfad Gebäuden Logik ausschließen
routes.Add(
new Route("@api/{*all}",
// A random and unlikely controller name as the default
new RouteValueDictionary() { { "controller", "qwewqewqeqweq" } },
// and a constraint requiring any controller to be that random, default value
new RouteValueDictionary() { { "controller", "qwewqewqeqweq" } },
new ApiHandler()
);
Das bedeutet, dass der Weg würde nur für Virtual Path Gebäude gewählt werden, wenn der Controller in Frage lautete: „qwewqewqeqweq“, die hoffentlich unwahrscheinlich ist. Ich sagte, es ist schrecklich.
Andere Tipps
Sie können den Namen der Route mit dem RouteLink
Helfer angeben:
<%: Html.RouteLink("link text", "Default",
new { action = "add", controller = "home" }) %>