2008-09-08 10 views
1

Ich implementiere eine HttpRequestValidationException in meinem Application_Error Handler, und wenn möglich, möchte ich eine benutzerdefinierte Nachricht anzeigen.Response.StatusCode und Internet Explorer - Angepasste Nachricht anzeigen?

Jetzt denke ich über den StatusCode nach. In meinem aktuellen Beispiel sendet es eine 200, was meiner Meinung nach nicht getan werden sollte. Ich möchte stattdessen die (IMHO) besser passende 400 Bad Anfrage senden. Gleichzeitig möchte ich Response.Write verwenden, um eine benutzerdefinierte Nachricht einzugeben. Firefox zeigt es richtig an, aber IE7 gibt mir die Default nicht hilfreiche Internet Explorer Error Page.

Auf der einen Seite, denke ich, dass Internet Explorer nur davon ausgeht, dass alles <> 200 hat einfach keinen "guten" Inhalt und die RFC is not really clear hier.

Also frage ich mich, sendet eine HTTP 200 für eine Fehlerseite durch eine HttpRequestValidationException gute Praxis oder nicht? Gibt es gute Alternativen?

+0

Vielen Dank! Meine Lösung: Ich habe eine> 512 Byte Error.aspx erstellt, aber von Global.asax wird der StatusCode auf 400 setzen und dann einen Server.Transfer statt Response.Redirect tun. Funktioniert gut mit AJAX und Internet Explorer. –

+0

Nur hinzufügen: Normalerweise wäre ein Response.Redirect auch eine praktikable Lösung. Wenn Sie jedoch ASP.net AJAX verwenden, werden Sie ebenfalls umgeleitet. Server.Transfer erlaubt es Ihnen, auf der aktuellen Seite für AJAX-Requests zu bleiben und den Fehler in JavaScript zu behandeln. Siehe meine HttpRequestValidationException Frage. –

Antwort

4

Ein HTTP 200-Antwortcode zeigt keinen Fehler an. Es zeigt an, dass alles in Ordnung war. Sie sollten keinen 200-Response-Code für einen Fehler verwenden.

Internet Explorer zeigt die Seite "Friendly Errors" an, wenn die Antwort weniger als 512 Byte beträgt. Hier ist mehr zu diesem Thema: http://weblogs.asp.net/scottgu/archive/2006/04/09/442332.aspx,

+0

Gut zu wissen, so eine Lösung wäre es, die Antwort auf mindestens 513 Bytes zu sprengen, was machbar sein sollte. –

1

Nein, es ist sicherlich keine gute Übung. 2XX-Statuscodes bedeuten (unter anderem), dass die Anfrage gültig ist. Das ist genau das Gegenteil einer HttpRequestValidationException.

Ich weiß nicht, wie man IE korrekt verhalten, leider. Ein etwas besserer Weg als eine 200 zu senden wäre, sie auf eine Fehlerseite umzuleiten, aber noch lange nicht perfekt.

1

Der Internet Explorer zeigt eine "freundliche HTTP-Fehlermeldung", wenn die Antwort 4xx oder 5xx lautet. Diese Option kann vom Benutzer im IE-Dialogfeld Tools.Options.Advanced [Browsing] deaktiviert werden.

Senden einer 200 für eine Fehlerseite ist in der Regel schlechte Praxis. Eine Alternative wäre, eine gültige "Error" -Seite zu haben, die angenommen ist, um Fehlermeldungen anzuzeigen (so eine 200 würde in Ordnung sein) und dann eine 3xx Umleitung zu dieser Seite verwenden.

+0

Das klingt nach einer guten Idee. Ich bekomme schon Albträume, die denken, wie man diesen Mechanismus mit AJAX funktioniert, aber ich werde mich durchkämpfen, weil ich nicht mit meinem derzeitigen Response.Write (hardcoded html) Ansatz zufrieden bin, da eine separate error.aspx andere Vorteile hat . –