Errori

Centralizzare la gestione errori in applicazioni web

Per gestire tutti i possibili errori non gestiti tramite blocchi try à catch è sufficiente inserire nel file global.asax dell’applicazione, all’interno di Application_Error, qualche riga di codice:

protected void Application_Error(Object s, EventArgs e)
{
/*
* Prendo l'errore:
* */
Exception ex = Server.GetLastError();
Server.ClearError();
/*
* Mi costruisco una stringa con alcune info:
* */
string Message = "";
Message = "URL: " + Request.Url.ToString();
Message += "\n" + "Errore: " + "\n" + ex.Message.ToString();
Message += "\n" + "Referrer: " + Request.UrlReferrer.ToString();
Message += "\n" + "Browser: " + Request.UserAgent.ToString();
Message += "\n" + "IP: " + Request.UserHostAddress.ToString();
/*
* Analizzo l'eccezione:
* */
if (ex.GetType().ToString() == "System.Web.HttpRequestValidationException")
{
/*
* Posso memorizzare la descrizione dell'errore:
* Session["applicationError"] = Server.HtmlEncode(ex.Message.ToString());
* */

/*
* Posso loggarmi tutte le informazioni che mi interessano:
*
* - Tipo di eccezione sollevata --> HttpRequestValidationException
* - Data / ora eccezione --> System.DateTime.Now
* - Ip client --> Request.UserHostAddress
* - Descrizione eccezione --> ex.Message
* - .......
* */

/*
* Redirezione pagina di errore applicazione:
* */
Response.Redirect("error.aspx");
}
else if (ex.GetType().ToString() == "System.Web.HttpUnhandledException")
{
Response.Redirect("error.aspx?err=[un mio parametro]");
}
else
{
Response.Redirect("error.aspx?err=[un mio parametro]");
}
}

In questo modo è possibile costruire una pagina error.aspx costruita ad hoc che segnali all’utente eventuali errori generate dall’applicazione (invece della triste pagina di server error).
Naturalmente il consiglio è quello di gestire tutte le possibili eccezioni su ogni singola pagina.
Questo è soltanto un paracadute in caso di una non corretta gestione del codice.
 

Indietro