2016-07-21 15 views
1

Ich habe meine benutzerdefinierte Fehlerseite eingerichtet, die gut funktionieren:ASP.net fangen Fehler auf Fehlerseite

<customErrors mode="On" redirectMode="ResponseRewrite"> 
    <error statusCode="500" redirect="~/Pages/ErrorPages/500.aspx" /> 
</customErrors> 

Auf 500.aspx:

Response.ClearContent(); 
    Response.StatusCode = 500; 
    Exception = Server.GetLastError(); 
    Code.Errors.Error.RecordNewError(ErrorType.InternalException, Exception, Code.Common.GetUserIPAddress().ToString(), HttpContext.Current); 
    Server.ClearError(); 

Problem ist, wenn die Fehlerseite einen Fehler wirft selbst erhalten wir einen hässlichen Fehler:

Wie falle ich zurück auf eine grundlegendere benutzerdefinierte Fehlerseite wenn die Fehlerseite selbst wirft einen Fehler?

+0

Eine Möglichkeit wäre es, die Logik in der 500.aspx Seite in einem Try-Catch-Block und in der catch-Anweisung zu wickeln, Umleitung auf eine statische 500.html Seite mit einer allgemeinen Fehlermeldung. – HaukurHaf

+0

@HaukurHaf hat das versucht, wird aber nicht helfen, wenn der Fehler von außerhalb dieser Logik stammt (z. B. global.asax oder die Masterseite) –

+2

Ja, das stimmt. Ich glaube, es ist die beste Vorgehensweise, dynamische Fehlerseiten zu vermeiden. Ich würde empfehlen, dass Sie eine statische HTML-Datei immer als Fehlerseite verwenden. Um den Fehler zu protokollieren (was Ihre aktuelle 500.aspx-Seite so weit macht, wie ich sehen kann), könnten Sie einfach das globale Ereignis Application_OnError in der Datei global.asax verwenden. – HaukurHaf

Antwort

3

Ich habe es gerade herausgefunden! Verwenden Sie die Page_Error Methode auf den Fehlerseiten selbst:

private void Page_Error(object sender, EventArgs e) 
    { 
     Response.ClearContent(); 
     Response.StatusCode = 500; 
     Exception = Server.GetLastError(); 
     HttpContext.Current.Response.Write("Error"); 
     HttpContext.Current.Response.End(); 
    }