Die MSDN-Dokumentation für das Element customErrors gibt an, dass es von System.Web.Configuration.CustomErrorsSection implementiert wird. Wenn wir den .NET Reflector von Red Gate zur Analyse dieser Klasse verwenden, können wir sehen, wo diese Einstellung im Framework verwendet wird.
Es wird von System.Web.UI.Page.HandleError und System.Web.HttpResponse.ReportRuntimeError verwendet.
Beide rufen System.Web.HttpResponse.RedirectToErrorPage auf.(Der Name dieser Methode ist verwirrend: Es ist wichtig zu beachten, dass RedirectToErrorPage die redirectMode-Einstellung als Parameter verwendet, also auch wenn Sie ResponseRewrite verwenden und tatsächlich keine Umleitung stattfindet.)
Der relevante Teil der RedirectToErrorPage Methode ist:
if (redirectMode == CustomErrorsRedirectMode.ResponseRewrite)
{
this.Context.Server.Execute(url);
}
es gibt keinen Weg zu sein scheint den Antwortcode in der Fehlerbehandlung zu setzen: am Ende des Tages ist es nur eine Ebene Server.Execute. Es scheint daher unvermeidlich, dass Sie Code schreiben müssten, um die gewünschte HTTP-Antwort zu erreichen.
Können Sie überprüfen, warum Sie eine einfache HTML-Datei verwenden möchten? Dies scheint eine sinnvolle Wahl für die Fehlerbehandlung zu sein, da Sie nicht den gesamten Overhead einer ASPX-Seite durchgehen müssen, wenn dies zu einem anderen Fehler führen könnte.
Aber vielleicht gibt es einen Mittelweg, der genauso robust ist wie eine .html-Datei?
Sie könnten beispielsweise einen vorkompilierten HttpHandler erstellen, ihn in der URL /500.error registrieren und dann 500.error Ihre defaultRedirect-Seite machen. (Dies wäre ähnlich wie ScriptResource.axd funktioniert.) Wenn Sie Ihr Modul in eine DLL vorkompilieren (im Gegensatz zu On-The-Fly-Kompilierung aus einer einfachen alten .axd-Datei), finden Sie möglicherweise, dass es in der gleichen Weise robust ist Gesicht der Fehlerbedingungen. Wenn ein Fehler auftritt, bei dem nicht einmal das funktioniert, funktioniert wahrscheinlich auch eine statische .html-Datei nicht. Beachten Sie, dass die customErrors-Direktive immer noch auf .NET unter der Haube basiert und weiterhin StaticFileHandler verwendet Ihre .html-Datei.
Alternativ könnten Sie auch einen Reverse Proxy vor Ihrer IIS-Anwendung in Erwägung ziehen, der selbst bei einem katastrophalen Ausfall des Anwendungspools eine freundliche 500-Seite liefert. Dies wäre mehr Arbeit zum Einrichten, wäre aber noch robuster als customErrors, z. Wenn Ihre web.config beschädigt wird, funktionieren selbst customErrors nicht.
Sie zeigen, dass von ASP.NET abhängig ist. Ich habe 500.html verwendet, um die Abhängigkeit von ASP.NET zu umgehen, aber es ist müßig, wenn ASP.NET nicht reagiert. Ich denke, meine beste Wette ist es, einen 500.aspx in zu verwenden, und eine Sicherungskopie der 500.html-Fehlerseite auf der IIS-Ebene zu konfigurieren, falls ASP.NET nicht verfügbar ist. –
frankadelic