Diese Frage steht im Zusammenhang mit Handle URI hacking gracefully in ASP.NET insofern, als es auch darum geht, Ausnahmen während eines ASP.NET-Anforderungslebenszyklus am besten zu behandeln. Ich habe einen Weg gefunden, die meisten Ausnahmen elegant zu behandeln, aber dann habe ich festgestellt, dass einige Ausnahmen so spät in der Anfrage auftreten, dass es keine Möglichkeit gibt, Dinge wie Server.Transfer
zu tun, um die gesamte Logik der Fehlerpräsentation in eine eigene Seite zu packen.Behandeln von Ausnahmen während eines ASP.NET-Anforderungslebenszyklus
Also, ich muss die Ausnahme innerhalb der Application_Error
Veranstaltung statt, und tun Response.Write
s und was nicht. Es ist hässlich. Ich verstehe, dass der Antwortstream unter bestimmten Umständen bereits geleert worden sein könnte, daher ist die Übertragung der Anfrage keine wirkliche Option. Ich möchte fragen, ob es jemanden gibt, der eine elegante Lösung für dieses Problem gefunden hat?
Auch ich finde es schwierig zu wissen, wann ich die Ausnahme anmutig behandeln kann, indem ich die Anfrage auf eine andere Seite übertrage und nicht. Was ist der beste Weg, um herauszufinden, wo im Anforderungslebenszyklus wir uns befinden, wenn eine Ausnahme auftritt? Wenn es beim Laden und Rendern einer Seite auftritt, kann Page_Error
damit umgehen, und ich hatte noch kein Problem Server.Transfer
dort zu tun. Aber wenn die Ausnahme entweder zu früh oder zu spät für Page_Error
auftritt, um sie zu fangen, und es Blasen zu Application_Error
, was tue ich, um zu wissen, ob es früh oder spät ist?
Wenn es im Lebenszyklus spät ist, werde es wahrscheinlich direkt zu tun habe Response.Write
von Application_Error
, aber wenn es früh kann ich Server.Transfer
tun. Das Problem ist, dass der Versuch, Server.Transfer
zu tun, selbst eine Ausnahme verursachen wird, wenn es auch in der Anforderung ist, es zu tun.
Also, gibt es eine globale Aufzählung oder etwas Ähnliches, das anzeigt, ob es zu spät ist, kreative Sachen mit der Antwort zu machen oder nicht?
Hallo, und danke für den Vorschlag. Eine externe Konsole-Anwendung wird nicht wirklich helfen, da, was ich will, ist nicht nur den Fehler zu fangen (was ich schon ziemlich gut), aber eine freundliche Fehlermeldung auch anzeigen. –
Verwenden Sie die benutzerdefinierten Fehlerseiten? Auf diese Weise können Sie benutzerdefinierte Informationen basierend auf einem der HTTP-Statuscodes anzeigen, die basierend auf dem Ergebnis einer Anfrage ausgelöst werden. –
ASP.NET leitet alle Anfragen an die Fehlerseiten um (anstatt zum Beispiel Server.Transfer zu machen), das ist also unbrauchbar. –