Estoy tratando de crear URI que se parecen a algo así: http://hostname/mobile/en/controller/action
para móviles O http://hostname/en/controller/action
para computadoras de escritorio (no móviles).La ruta siempre va al primer maproute
Mi ruta actualmente tiene este aspecto (Global.asax.cs)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Mobile", // Route name
"mobile/{language}/{controller}/{action}/{id}", // URL with parameters
new { language = "en", controller = "Route", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new { language = @"en|us" } // validation
);
routes.MapRoute(
"Default", // Route name
"{language}/{controller}/{action}/{id}", // URL with parameters
new { language = "en", controller = "Route", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new { language = @"en|us" } // validation
);
El problema se produce cuando intento hacer una return RedirectToAction("Add", "User");
Siempre redirige el navegador de escritorio desde /en/User/List
a /mobile/en/User/Add
cuando quiero para ir al /en/User/Add
. La versión móvil funciona correctamente, pero creo que esto se debe a que la primera ruta "móvil" siempre se ve como la ruta que coincide incluso si no tiene/móvil/al inicio.
estoy tratando de utilizar el mismo controlador para ambas versiones, pero estoy atascado en la que siempre volver a dirigir a la ruta móvil . Esto significa que RedirectToRoute
no es perfecto ya que quiero rutas dinámicas.
Gracias por su ayuda.
Gracias René que parece exactamente lo que esperaba hacer. ¿Podría decirme dónde es el mejor lugar para poner el método de extensión? – Adrian
Ponga la clase estática ControllerExtensions en cualquier lugar que desee. Y en el controlador que desea usar el redireccionamiento, asegúrese de incluir el espacio de nombres en el que se encuentra la clase de extensiones. Luego, en cualquier lugar de su controlador, puede usar this.CusomRedirectToRoute ("Inicio", "Índice", routeValues); También puede agregar otro método de extensión que ponga null como el valor routeValues si lo desea. –
Si quiere arreglarlo, la última parte de mi comentario puede ser reemplazada por el sistema ordenado y limpio para obtener el nombre de la ruta como se describe en esta publicación: http://stackoverflow.com/questions/363211/how -can-i-get-the-route-name-in-controller-in-asp-net-mvc –