Die Methode Response.Redirect() kennt vermutlich jeder ASP.NET Entwickler. Mit Hilfe dieser Methode wird ein Seitenbesucher auf eine andere Webseite umgeleitet. Doch was steckt dahinter? Wann sollte man die Redirect Methode nutzen und wann nicht?
Schauen wir uns an was passiert, wenn folgender Code ausgeführt wird:
Response.Redirect("http://dotnet-snippets.de/dns/Default.aspx");
Der Webserver antwortet dem Client mit dem HTTP Statuscode 302, dies bedeutet das die Webseite temporär umgeleitet wurde.Zitat von Wikipedia:Die angeforderte Ressource steht vorübergehend unter der im „Location“-Header-Feld angegebenen Adresse bereit (in HTTP/1.0 „Moved Temporarily“, RFC 1945). Die alte Adresse bleibt gültig.
Im Trace sieht dies folgendermaßen aus:
Wenn eine Seite temporär unter einer anderen Adresse erreichbar ist, sollte Response.Redirect() verwendet werden. Ist eine Seite zukünftig immer unter einer anderen Adresse erreichbar, sollte der HTTP Statuscode 301 verwendet werden.Der Statuscode 301 steht für eine permanente Umleitung. Zitat von Wikipedia:Die angeforderte Ressource steht ab sofort unter der im „Location“-Header-Feld angegebenen Adresse bereit. Die alte Adresse ist nicht länger gültig.Dies ist sehr wichtig für Suchmaschinen, denn somit bekommen Suchmaschinen die Information, dass die alte URL aus dem Index entfernt werden kann.
HttpContext.Response bietet hierzu die Eigenschaft Status und die Methode AddHeader an:
HttpContext.Current.Response.Status = "301 Moved Permanently"; HttpContext.Current.Response.AddHeader("Location", newUrl);
Um diese 301 - Weiterleitung jederzeit komfortabel nutzen zu können bietet sich eine Extension Method an:
using System.Web; namespace Welker.Extensions { public static class Extensions { public static void RedirectPermanently(this HttpResponse response, string newUrl) { HttpContext.Current.Response.Status = "301 Moved Permanently"; HttpContext.Current.Response.AddHeader("Location", newUrl); } } }
Nach dem Einbinden der Erweiterungsmethode kann diese über folgenden Code aufgerufen werden:
Response.RedirectPermanently("http://live.com");
Im Trace kann man den Unterschied deutlich sehen:
Have Fun!
Posted in ASP.NET |Comments [4]