2009-11-12 9 views
20

Warum verwendet ASP/ASP.NET Response.Redirect einen HTTP-302-Statuscode ("temporär verschoben"), obwohl in den meisten Fällen ein HTTP-301-Statuscode ("Permanent verschoben")) wäre angemessener?Response.Redirect HTTP-Statuscode

Antwort

39

Antworten mit dem Status 301 sollen zwischenspeicherbar sein, und ich glaube nicht, dass Sie dieses Verhalten wollen für die meisten ASP/ASP.NET umleitet.

ASP.NET 4.0 ist, hat die RedirectPermanent Methode dafür, wenn nötig.

+8

+1 für die Angabe von RedirectPermanent. – Heinzi

+0

Die neue RedirectPermanent-Methode, die mit ASP.NET 4.0 geliefert wird, ist ziemlich praktisch! Leider läuft das Projekt, an dem ich arbeite, auf 2.0 ... – Vinz

9

Ein häufiger Anwendungsfall von Response.Redirect ist, den Benutzer zu einer anderen Seite in serverseitigen Code nach einer Postback zu bewegen, z.B. etwas in den Linien von

private void MyButton_Click(object sender, EventArgs e) 
{ 
    if (some condition) { 
     Response.Redirect("ShowProduct.aspx"); 
    } else { 
     Response.Redirect("SorryOutOfStock.aspx"); 
    } 
} 

In diesen Fällen wäre 301 völlig falsch. In der Tat denke ich, dass der obige Fall (bedingte Verschiebung des Benutzers auf eine andere Seite nach einigen UI-Interaktion) eine häufigere Verwendung von Response.Redirect als real this-page-move-to-ahead-URL-forever-Szenario (wo ein Rückkehrcode von 301 würde passend sein).

2

Neben der Antwort von Heinzi, die einzige Stelle im Web, die viel Beachtung des 301 ist wahrscheinlich die Suchmaschinen wäre zu nehmen. Die meisten Browser werden 301 nicht verfolgen und aufzeichnen, um jede nachfolgende Anfrage für die anfängliche URL automatisch umzuleiten. Browser behandeln 301 genauso, wie sie 302 behandeln. Daher ist 302 in dynamischen Inhalten, wie sie in ASP.NET erzeugt werden, durchaus angemessen.

+0

Ja, es sind die Suchspinnen, um die ich mir Sorgen mache. – Vinz

19

Ich habe dieses handliche Permanent Redirect mit Erfolg eingesetzt:

public void RedirectPermanent(string newPath) 
{ 
    HttpContext.Current.Response.Clear(); 
    HttpContext.Current.Response.Status = "301 Moved Permanently"; 
    HttpContext.Current.Response.AddHeader("Location", newPath); 
    HttpContext.Current.Response.End(); 
} 
+1

Ich benutze dies auch, aber ich habe mich nur gefragt, warum ich das "Workaround" machen muss. – Vinz

-1

Der Fehler, den Sie bekommen Response.redirect nicht passend ist! Der HTTP-Antwortstatuscode 301 Moved Permanently wird für permanente Umleitung verwendet, dh aktuelle Links oder Datensätze mit der URL, für die die 301 Moved Permanently-Antwort empfangen wurde, sollten auf die neue URL im Feld Location der Antwort aktualisiert werden .

+5

Wäre gut, wenn Sie nicht in jeder Ihrer Antworten Links zu http://onfrnz.com/search veröffentlichen, es ist ein wenig spammig. Vielen Dank. – Kev