No ASP.NET MVC, você pode retornar um ActionResult de redirecionamento facilmente:
return RedirectToAction("Index");
or
return RedirectToRoute(new { controller = "home", version = Math.Random() * 10 });
Isso realmente fornecerá um redirecionamento HTTP, o que normalmente é bom. No entanto, ao usar o Google Analytics, isso causa grandes problemas, pois o referenciador original está perdido, portanto o Google não sabe de onde você veio. Isso perde informações úteis, como quaisquer termos do mecanismo de pesquisa.
Como observação lateral, esse método tem a vantagem de remover qualquer parâmetro que possa ter sido proveniente de campanhas, mas ainda me permita capturá-los no servidor. Deixá-los na string de consulta leva as pessoas a marcarem favoritos, no twitter ou no blog, um link que não deveriam. Eu já vi isso várias vezes em que as pessoas enviaram links para o nosso site contendo IDs de campanha.
De qualquer forma, estou escrevendo um controlador de 'gateway' para todas as visitas recebidas no site que eu possa redirecionar para locais diferentes ou versões alternativas.
Por enquanto, eu me preocupo mais com o Google por agora (do que os marcadores acidentais) e quero poder enviar alguém que visite /
a página que eles obteriam se fossem /home/7
, que é a versão 7 de uma página inicial.
Como eu disse antes, se eu fizer isso, perco a capacidade do google de analisar o referenciador:
return RedirectToAction(new { controller = "home", version = 7 });
O que eu realmente quero é um
return ServerTransferAction(new { controller = "home", version = 7 });
o que me proporcionará essa visualização sem um redirecionamento do lado do cliente. Eu não acho que isso exista.
Atualmente, a melhor coisa que posso criar é duplicar toda a lógica do controlador HomeController.Index(..)
em minha GatewayController.Index
ação. Isso significa que eu tinha que passar 'Views/Home'
para 'Shared'
então era acessível. Deve haver uma maneira melhor ?? ..
if
declaração simples é uma solução tentadora demais.
RouteBase
para que você possa colocar sua if
declaração lá em vez de dobrar tudo para trás para pular de um controlador para outro?
ServerTransferAction
você está tentando replicar? Isso é uma coisa real? (não poderia encontrar qualquer informação sobre ele ... obrigado pela pergunta, btw, a resposta abaixo é excelente)