В ASP.NET MVC вы можете легко перенаправить ActionResult:
return RedirectToAction("Index");
or
return RedirectToRoute(new { controller = "home", version = Math.Random() * 10 });
Это фактически даст HTTP-перенаправление, которое нормально нормально. Однако при использовании Google Analytics это вызывает большие проблемы, потому что исходный референт потерян, поэтому Google не знает, откуда вы пришли. Это теряет полезную информацию, такую как любые условия поисковой системы.
В качестве побочного примечания этот метод имеет преимущество в том, что он удаляет все параметры, которые могут возникнуть из кампаний, но все же позволяет мне захватить их на стороне сервера. Оставляя их в строке запроса, приводит к тому, что пользователи закладок или твиттер или блог свяжут ссылку, которой они не должны. Я видел это несколько раз, когда люди щебетали ссылки на наш сайт, содержащие идентификаторы кампании.
В любом случае, я пишу контроллер "шлюза" для всех входящих посещений сайта, которые я могу перенаправить в разные места или альтернативные версии.
В настоящее время я больше забочусь о Google на данный момент (чем случайная закладок), и я хочу, чтобы отправить кого-то, кто посещает /
, на страницу, которую они получили бы, если бы отправились на /home/7
, которая является версией 7 домашней страницы.
Как я уже сказал, если я это сделаю, я теряю способность Google анализировать референт:
return RedirectToAction(new { controller = "home", version = 7 });
Что я действительно хочу, это
return ServerTransferAction(new { controller = "home", version = 7 });
который предоставит мне этот вид без перенаправления на стороне клиента. Я не думаю, что такая вещь существует.
В настоящее время лучше всего придумать дублирование всей логики контроллера для HomeController.Index(..)
в действии GatewayController.Index
. Это означает, что мне пришлось перемещать 'Views/Home'
в 'Shared'
, чтобы он был доступен. Должен быть лучший способ?..