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