В 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'
, чтобы он был доступен. Должен быть лучший способ ?? ..