Segnalatore di errori nel nostro sito

Quando un’applicazione si trova nella fase di test è molto utile venire a conoscenza di tutti gli errori che si verificano durante l’utilizzo dei visitatori delle nostre pagine ASP.NET.

All’interno del Global.asax troviamo un nuovo evento (che in ASP non esisteva): Application_Error. Questo evento si verifica ogni qualvolta il server va in errore, sia per errori di codice (500), sia per errori di autorizzazione (401) che di pagine non trovate (404).

Con poche righe, è possibile inviarci un’email ogni qualvolta l’evento viene richiamato.


<%@ Application language=”C#” %>

<%@ Import Namespace=”System.Diagnostics” %>

<script runat=”server”>

public void Application_Error(Object sender, EventArgs e) {

StringBuilder strError = new StringBuilder();

int innerLevel = 0;

Exception ex = Server.GetLastError();

strError.Append(“<font face=tahoma size=1>”);

while ( ex != null ) {

strError.AppendFormat(“Application Error (inner={0}): {1}<br><br>”, innerLevel, ex.GetType().Name);

strError.Append( “<b><font size=3 color=#800000>” + ex.Message + “</font></b><br><br>” );

strError.Append( “<b>Source:</b> ” + ex.Source + “<br><br>” );

string strStack = ex.StackTrace;

strStack = strStack.Replace(“\r\n”, “<br>”);

strError.Append( “<b>StackTrace:</b> <table cellspacing=0 cellpadding=2 border=0 bgcolor=#FFFFCC><tr><td><font face=tahoma size=1>” + strStack + “</font></td></tr></table><br>” );

ex = ex.InnerException;

innerLevel++;

}

strError.Append(“Indirizzo IP client: ” + (string) Request.ServerVariables[“REMOTE_ADDR”]);

strError.Append(“</font>”);

// Spedisco l’email con la segnalazione dell’errore

System.Web.Mail.MailMessage mailMessage = new System.Web.Mail.MailMessage();

mailMessage.From = “webmaster@tuosito.com”;

mailMessage.To = “tuocasella@diposta.com”;

mailMessage.Subject = “Si è verificato un errore nel tuo sito”;

mailMessage.BodyFormat = System.Web.Mail.MailFormat.Html;

mailMessage.Body = strError.ToString();

try {

System.Web.Mail.SmtpMail.SmtpServer = “localhost”;

System.Web.Mail.SmtpMail.Send(mailMessage);

Response.Redirect(“PaginaDiErrore.html”); // Rimando il client ad una pagina generica di errore

} catch (Exception ex2) {

// Il sistema non è riuscito ad inviare l’email,

// scrivo il problema nel Debug

Debug.WriteLine( “Eccezione durante l’invio dell’e-mail: ” + ex2.GetType().Name );

Debug.WriteLine( ex2.Message );

Debug.WriteLine( ex2.StackTrace );

}

}

</script>

I Video di HTML.it

Lucia Cresta, Avanade al .NET Campus

Come sfruttare le manifestazioni come .NET Campus per scoprire talenti e offrire opportunità professionali. Ne parliamo con Lucia Cresta di […]