Dans ASP.NET MVC, vous pouvez renvoyer un ActionResult de redirection assez facilement:
return RedirectToAction("Index");
or
return RedirectToRoute(new { controller = "home", version = Math.Random() * 10 });
Cela donnera en fait une redirection HTTP, ce qui est normalement bien. Cependant, lorsque vous utilisez Google Analytics, cela pose de gros problèmes car le référent d'origine est perdu et Google ne sait donc pas d'où vous venez. Cela perd des informations utiles telles que les termes des moteurs de recherche.
En passant, cette méthode a l'avantage de supprimer tous les paramètres pouvant provenir de campagnes mais me permet quand même de les capturer côté serveur. Les laisser dans la chaîne de requête amène les gens à mettre en favori ou à twitter ou à bloguer un lien qu'ils ne devraient pas. J'ai vu cela plusieurs fois où des gens ont envoyé des liens Twitter vers notre site contenant des identifiants de campagne.
Quoi qu'il en soit, j'écris un contrôleur de «passerelle» pour toutes les visites entrantes sur le site que je peux rediriger vers différents endroits ou des versions alternatives.
Pour l'instant, je me soucie plus de Google pour le moment (que de la mise en signet accidentelle), et je veux pouvoir envoyer quelqu'un qui visite /
la page qu'il obtiendrait s'il allait /home/7
, qui est la version 7 d'une page d'accueil.
Comme je l'ai déjà dit, si je fais cela, je perds la possibilité pour Google d'analyser le référent:
return RedirectToAction(new { controller = "home", version = 7 });
Ce que je veux vraiment, c'est un
return ServerTransferAction(new { controller = "home", version = 7 });
ce qui me donnera cette vue sans redirection côté client. Je ne pense pas qu'une telle chose existe cependant.
Actuellement, la meilleure chose que je puisse proposer est de dupliquer toute la logique du contrôleur HomeController.Index(..)
dans mon GatewayController.Index
action. Cela signifie que je devais passer 'Views/Home'
en 'Shared'
sorte qu'il était accessible. Il doit y avoir un meilleur moyen ?? ..
if
déclaration est une solution trop tentante.
RouteBase
pour que vous puissiez y mettre votre if
déclaration au lieu de tout plier en arrière pour passer d'un contrôleur à un autre?
ServerTransferAction
que vous essayez de reproduire exactement ? Est-ce une chose réelle? (je