En ASP.NET MVC puede devolver un ActionResult de redireccionamiento con bastante facilidad:
return RedirectToAction("Index");
or
return RedirectToRoute(new { controller = "home", version = Math.Random() * 10 });
Esto realmente dará una redirección HTTP, que normalmente está bien. Sin embargo, cuando se utiliza Google Analytics, esto causa grandes problemas porque el árbitro original se pierde, por lo que Google no sabe de dónde viene. Esto pierde información útil, como los términos de cualquier motor de búsqueda.
Como nota al margen, este método tiene la ventaja de eliminar cualquier parámetro que pueda haber provenido de campañas, pero aún así me permite capturarlos del lado del servidor. Dejarlos en la cadena de consulta lleva a las personas a marcadores o twitter o blog un enlace que no deberían. He visto esto varias veces donde las personas han twitteado enlaces a nuestro sitio que contienen ID de campaña.
De todos modos, estoy escribiendo un controlador 'gateway' para todas las visitas entrantes al sitio que puedo redirigir a diferentes lugares o versiones alternativas.
Por ahora me importa más acerca de Google por ahora (que los marcadores accidentales), y quiero poder enviar a alguien que visite /
la página que obtendrían si fueran /home/7
, que es la versión 7 de una página de inicio.
Como dije antes. Si hago esto, pierdo la capacidad de Google para analizar el referente:
return RedirectToAction(new { controller = "home", version = 7 });
Lo que realmente quiero es un
return ServerTransferAction(new { controller = "home", version = 7 });
lo que me dará esa vista sin una redirección del lado del cliente. Sin embargo, no creo que tal cosa exista.
Actualmente, lo mejor que se me ocurre es duplicar toda la lógica del controlador HomeController.Index(..)
en mi GatewayController.Index
Acción. Esto significa que tenía que mover 'Views/Home'
en 'Shared'
lo que era accesible. ¿¿Debe haber una mejor manera??..
if
declaración es una solución demasiado tentadora.
RouteBase
para que puedas poner tu if
declaración allí en lugar de doblar todo hacia atrás para saltar de un controlador a otro?
ServerTransferAction
que intentabas replicar? ¿Eso es algo real? (no pude encontrar ninguna información al respecto ... gracias por la pregunta, por cierto, la respuesta a continuación es excelente)