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?

¿Fue útil?

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" }) %>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top