IRouteHandler encargo tornillos ruta hasta la construcción de vínculo MVC
-
08-10-2019 - |
Pregunta
Tengo un routehandler costumbre en ASP.NET MVC2 para atrapar todos los URL de un camino prefijado en este aspecto:
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
);
enrutamiento funciona bien, pero si uso Html.ActionLink o ReturnToAction retorno () desde un controlador, el URI integrado crea un URI rotos como esto:
/@api?action=Add&controller=Home
en lugar de
/Home/Add
¿Cómo puedo influir en la lógica de construcción uri tener en cuenta el patrón de ruta predeterminada?
Solución
Yo he llegado con un corte para detener el comportamiento descrito. Si bien esta "resuelve" el problema, que es realmente el tipo de desagradable y yo preferiría una forma más limpia para excluir una ruta desde la lógica de construcción de camino virtual
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()
);
Esto significa que la única ruta sería elegido para la construcción de trayecto virtual si el controlador en cuestión era "qwewqewqeqweq", que se espera es poco probable. Me dijo que era desagradable.
Otros consejos
Se puede especificar el nombre de la ruta con el ayudante RouteLink
:
<%: Html.RouteLink("link text", "Default",
new { action = "add", controller = "home" }) %>