2016-07-21 1 views
1

J'ai mis ma page d'erreur personnalisée qui fonctionne bien:ASP.net erreur de capture d'erreur Page

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

Sur 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(); 

Le problème est, si la page d'erreur renvoie une erreur lui-même, nous obtenons une erreur laide:

Runtime Error

Description: An exception occurred while processing your request. Additionally, another exception occurred while executing the custom error page for the first exception. The request has been terminated.

Comment puis-je revenir à une page d'erreur personnalisée plus basique si la page d'erreur lui-même jette une erreur?

+0

Une façon possible serait d'envelopper la logique dans la page 500.aspx dans un bloc try-catch et dans la déclaration de capture, rediriger vers un 500.html statique page avec un message d'erreur générique. – HaukurHaf

+0

@HaukurHaf a essayé cela, mais ne sera pas utile si l'erreur provient de l'extérieur de cette logique (par exemple, global.asax ou la page maître) –

+2

Oui, c'est vrai. Je crois que c'est la meilleure pratique pour éviter d'utiliser des pages d'erreur dynamiques, je vous recommande d'utiliser simplement un fichier .html statique comme une page d'erreur tout le temps. Pour enregistrer l'erreur (que votre page 500.aspx actuelle fait aussi loin que je peux voir), vous pouvez simplement utiliser l'événement global Application_OnError dans le fichier global.asax. – HaukurHaf

Répondre

3

Vous l'avez compris tout à l'heure! Utilisez la méthode Page_Error sur les pages d'erreur eux-mêmes:

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(); 
    }