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
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.
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).
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.
Ja, es sind die Suchspinnen, um die ich mir Sorgen mache. – Vinz
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();
}
Ich benutze dies auch, aber ich habe mich nur gefragt, warum ich das "Workaround" machen muss. – Vinz
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 .
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
- 1. Response.Redirect
- 2. HttpResponseException Annahme nicht Httpstatuscode
- 3. Getting a HttpStatusCode of 0
- 4. Rückgabe HttpStatusCode in der Antwort
- 5. ASPnet MVC Identität - SendAsync Httpstatuscode
- 6. Benutzerdefinierter HttpStatusCode ohne Fehlermeldung (HttpActionResult)
- 7. von int-Wert generieren Httpstatuscode
- 8. Rückgabe HttpStatusCode in API-Methode
- 9. Response.Redirect Ausnahme
- 10. Response.Redirect problam
- 11. Response.Redirect nicht immer umleiten
- 12. Variablen auf Response.Redirect beibehalten
- 13. Login Control - Response.Redirect
- 14. Rückgabe nach response.redirect
- 15. Response.redirect in Vbscript
- 16. PostBackUrl Vs. Response.Redirect
- 17. Aufruf Response.End() nach Response.Redirect()
- 18. Response.redirect tötet lokalen Speicher?
- 19. Response.Redirect funktioniert nicht
- 20. Response.Redirect using ~ Pfad
- 21. Response.Redirect funktioniert nicht
- 22. Probleme mit response.redirect
- 23. Bizarre Fehler mit Response.Redirect
- 24. Aufruf Response.redirect durch Ajax
- 25. outputstream response.redirect binär
- 26. Change Domain auf Response.Redirect
- 27. Response.Redirect funktioniert nicht in Global.asax
- 28. Warum Response.Redirect ("Seitenname.aspx") nicht funktioniert
- 29. falsche URL Anzeige nach Response.Redirect
- 30. EndResponse in einem Response.Redirect Verwendung
+1 für die Angabe von RedirectPermanent. – Heinzi
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