¿Como gestiono errores en mi aplicacion ASP.NET en tiempo de ejecución?

Se acerca la primavera que, como muchos sabéis, la sangre altera y puede producir errores en nuestro código con más frecuencia de la habitual :-). Hay veces que queremos personalizar los mensajes de error en tiempo de ejecución que arroja nuestra aplicación cuando se produce una excepción en nuestro código porque no está disponible la base de datos o cuando no se encuentra una página de nuestro sitio web. Para ello veo tres opciones muy claras y habituales:


1- Configurar la web para que no de información detallada del error que pueda servir a un atacante


Esto se hace desde el web.config. Unas líneas de código creo que valen mas que mil palabras y muchos conocemos codigos http 404 de pagina no encontrada y 403 de acceso no permitido para redirigirlos a una página .aspx hecha por nosotros:


<customErrors mode=»RemoteOnly» defaultRedirect=»AppErrors.aspx»>
   <error statusCode=»404″ redirect=»NoSuchPage.aspx»/>
   <error statusCode=»403″ redirect=»NoAccessAllowed.aspx»/>
</customErrors>


2.- Control estructurado de excepciones con Try.Catch. Aquí tenéis otro ejemplo sencillo de captura de error en la conexion a una base de datos donde la propiedad Message de la excepcion ex guarda el error producido. Recordar que el bloque finally siempre se ejecuta


Try
   SqlConnection1.Open()
   SqlDataAdapter1.Fill(Me.DsPubs1)
Catch ex As Exception
   If HttpContext.Current.Request.UserHostAddress = «127.0.0.1» Then
      Session(«CurrentError») = ex.Message
    Else
      Session(«CurrentError») = «Error processing page.»
    End If
    Server.Transfer(«ApplicationError.aspx»)
Finally
       SqlConnection1.Close()
End Try


3.- Crear un manejador global de errores en el global.asax.


 Hay un evento en el global.asax que nos permite capturar el error y redirigir a otra página como se ve en estas líneas de código en el que se guarda en  Server.GetLastError.Message el último error producido en la aplicacion:


Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
   Session(«CurrentError») = «Global: » & Server.GetLastError.Message
   Server.Transfer(«lasterr.aspx»)
End Sub


Espero os sean de utilidad para vuestras aplicaciones web ASP.NET como lo son para mi en mi trabajo diario.


Saludos


Sergio Vázquez