viti percorso personalizzato IRouteHandler fino MVC link building
-
08-10-2019 - |
Domanda
Ho un routehandler personalizzato in ASP.NET MVC2 di catturare tutti gli URL in un percorso prefissato in questo modo:
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 funziona bene, ma se io uso Html.ActionLink o ritorno ReturnToAction () da un controllore, l'uri costruita crea un URI rotto in questo modo:
/@api?action=Add&controller=Home
anziché
/Home/Add
Come posso influenzare la logica dell'edificio uri a prendere in considerazione il modello di percorso predefinito?
Soluzione
Sono venuto su con un hack per fermare il comportamento descritto. Mentre questo "risolve" il problema, è davvero sorta di brutto e preferirei un modo più pulito per escludere un percorso dalla logica dell'edificio percorso virtuale
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()
);
Ciò significa che il percorso sarebbe stato scelto solo per la creazione Virtual Path se il controller in questione era "qwewqewqeqweq", che è si spera improbabile. Ho detto che era brutto.
Altri suggerimenti
è possibile specificare il nome del percorso utilizzando l'helper RouteLink
:
<%: Html.RouteLink("link text", "Default",
new { action = "add", controller = "home" }) %>