In ASP.NET MVC können Sie ganz einfach ein umleitendes ActionResult zurückgeben:
return RedirectToAction("Index");
or
return RedirectToRoute(new { controller = "home", version = Math.Random() * 10 });
Dies führt tatsächlich zu einer HTTP-Umleitung, was normalerweise in Ordnung ist. Bei Verwendung von Google Analytics führt dies jedoch zu großen Problemen, da der ursprüngliche Referer verloren geht und Google nicht weiß, woher Sie stammen. Dadurch gehen nützliche Informationen wie Suchmaschinenbegriffe verloren.
Nebenbei bemerkt hat diese Methode den Vorteil, dass alle Parameter entfernt werden, die möglicherweise aus Kampagnen stammen, aber ich kann sie dennoch serverseitig erfassen. Wenn Sie sie in der Abfragezeichenfolge belassen, werden Lesezeichen gesetzt oder Twitter oder Blog ein Link, den sie nicht sollten. Ich habe dies mehrmals gesehen, als Leute Links zu unserer Website mit Kampagnen-IDs getwittert haben.
Wie auch immer, ich schreibe einen "Gateway" -Controller für alle eingehenden Besuche auf der Site, den ich möglicherweise an verschiedene Orte oder alternative Versionen weiterleiten kann.
Im Moment interessiert mich Google vorerst mehr (als versehentliches Lesezeichen), und ich möchte in der Lage sein, jemanden zu senden, der /
die Seite besucht , die er erhalten würde, wenn er zu /home/7
dieser Version 7 einer Homepage gehen würde.
Wie ich bereits sagte Wenn ich dies tue, verliere ich die Fähigkeit von Google, den Referer zu analysieren:
return RedirectToAction(new { controller = "home", version = 7 });
Was ich wirklich will, ist ein
return ServerTransferAction(new { controller = "home", version = 7 });
Dadurch bekomme ich diese Ansicht ohne eine clientseitige Weiterleitung. Ich glaube nicht, dass so etwas existiert.
Derzeit ist das Beste, was ich mir einfallen lassen kann, die gesamte Controller-Logik HomeController.Index(..)
in meiner GatewayController.Index
Aktion zu duplizieren . Das heißt , ich musste umziehen 'Views/Home'
in 'Shared'
so war es zugänglich. Es muss einen besseren Weg geben ?? ..
if
Aussage einfach zu verlockend.
RouteBase
damit Sie Ihre if
Anweisung dort platzieren können, anstatt alles nach hinten zu biegen, um von einem Controller zum anderen zu springen?
ServerTransferAction
wollten Sie replizieren? Ist das eine tatsächliche Sache? (konnte keine Informationen darüber finden ... danke für die Frage, übrigens, die Antwort unten ist hervorragend)