La verdad es que algo muy sencillo de hacer y que deberíamos hacer como norma en todas nuestras aplicaciones.
Simplemente tenemos que implementar el método “Application_Error” del “Global.asax.cs” y podremos capturar cualquier error que se produzca en la aplicación aunque no hayamos controlado la Excepción con un Try-Catch.
Una vez capturado el error, podemos mostrarlo en nuestro Log (es aconsejable tener uno), o enviarnos un email con lo que ha pasado, e incluso limpiar el error y hacer como que no ha pasado nada…
Bueno, ahí va el código:
protected void Application_Error(Object sender, EventArgs ea)
{
string uriFormat = "\r\n\r\nURI: {0}\r\n\r\n";
string exceptionFormat = "{0}: \"{1}\"\r\n{2}\r\n\r\n";
StringBuilder message = new StringBuilder();
if (Request != null)
{
message.AppendFormat(uriFormat, Request.Path);
}
if (Server != null)
{
Exception e;
for (e = Server.GetLastError(); e != null; e = e.InnerException)
{
message.AppendFormat(exceptionFormat, e.GetType().Name, e.Message, e.StackTrace);
}
}
// En este caso, escribimos en nuestro log
MyAppLogger.Log("** APP ERROR Sin controlar la excepción **\n" + message.ToString());
//Server.ClearError(); // descomentar esto para cancelar el error
}