In ASP.NET MVC è possibile restituire un ActionResult di reindirizzamento abbastanza facilmente:
return RedirectToAction("Index");
or
return RedirectToRoute(new { controller = "home", version = Math.Random() * 10 });
Questo effettivamente fornirà un reindirizzamento HTTP, che normalmente va bene. Tuttavia, quando si utilizza Google Analytics, ciò causa grossi problemi perché il referer originale viene perso, quindi Google non sa da dove vieni. Ciò perde informazioni utili come qualsiasi termine del motore di ricerca.
Come nota a margine, questo metodo ha il vantaggio di rimuovere tutti i parametri che potrebbero provenire dalle campagne ma mi consente ancora di acquisirli sul lato server. Lasciandoli nella stringa di query porta le persone ai segnalibri o Twitter o blog un link che non dovrebbero. L'ho visto diverse volte in cui le persone hanno twitterato link al nostro sito contenenti ID campagna.
In ogni caso, sto scrivendo un controller "gateway" per tutte le visite in arrivo sul sito che posso reindirizzare verso luoghi diversi o versioni alternative.
Per ora mi interessa di più di Google per ora (piuttosto che dei segnalibri accidentali) e voglio essere in grado di inviare qualcuno che visita /
la pagina che otterrebbe se fosse andato a /home/7
, che è la versione 7 di una homepage.
Come ho detto prima, se lo faccio perdo la capacità di google di analizzare il referer:
return RedirectToAction(new { controller = "home", version = 7 });
Quello che voglio davvero è un
return ServerTransferAction(new { controller = "home", version = 7 });
che mi porterà quella vista senza un reindirizzamento lato client. Non penso che esista una cosa del genere.
Attualmente la cosa migliore che posso inventare è duplicare l'intera logica del controller HomeController.Index(..)
nella mia GatewayController.Index
azione. Ciò significa che ho dovuto trasferirmi 'Views/Home'
in 'Shared'
modo che fosse accessibile. Deve esserci un modo migliore ?? ..
if
affermazione è una soluzione troppo allettante.
RouteBase
modo da poter inserire la tua if
dichiarazione lì invece di piegare tutto all'indietro per saltare da un controller a un altro?
ServerTransferAction
quello che stavi cercando di replicare? È una cosa reale? (non sono riuscito a trovare alcuna informazione al riguardo ... grazie per la domanda, tra l'altro, la risposta qui sotto è superba)