vis de route personnalisée IRouteHandler up link building MVC
-
08-10-2019 - |
Question
J'ai un routehandler personnalisé dans ASP.NET MVC2 pour attraper à un chemin préfixé de toutes les URL comme ceci:
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 fonctionne très bien, mais si j'utilise Html.ActionLink ou ReturnToAction de retour () à partir d'un contrôleur, le uri construit crée un uri cassé comme ceci:
/@api?action=Add&controller=Home
au lieu de
/Home/Add
Comment puis-je influencer la logique de construction uri à considérer le modèle de route par défaut?
La solution
Je suis venu avec un hack pour arrêter le comportement décrit. Bien que ce « résout » le problème, il est vraiment une sorte de méchant et je préférerais une manière plus propre à exclure une route de la logique de construction de chemin virtuel
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()
);
Cela signifie que la route ne serait choisi pour la construction du chemin virtuel si le contrôleur en question était « qwewqewqeqweq », ce qui est peu probable que je l'espère. Je l'ai dit était très sale.
Autres conseils
vous pouvez spécifier le nom de la route en utilisant l'assistant RouteLink
:
<%: Html.RouteLink("link text", "Default",
new { action = "add", controller = "home" }) %>