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