He encontrado enormes cantidades de información (es decir, this) sobre cómo manejar errores inesperados en ASP.NET, utilizando los métodos Page_Error y Application_Error, así como la directiva customErrors en Web. config.Visualización de errores esperados para usuarios en ASP.NET
Sin embargo, mi pregunta es cuál es la mejor manera de manejar los errores ESPERADOS. Por ejemplo, tengo una página para mostrar un registro. Cada registro tiene una lista específica de usuarios que pueden verlo. Dado que muchos usuarios pueden tener el rol "Ver registros" que no están en dicha lista, tengo que escribir un código en la página para filtrarlos.
protected void Page_Load(object sender, EventArgs e)
{
var user = Membership.GetUser();
if (!CanUserViewThisRecord(Request["id"], user.Username)
{
// Display an error to the user that says,
// "You are not allowed to view this message", and quit.
}
else
{
// Display the page.
}
}
¿Cuáles son las mejores prácticas para manejar este tipo de error? Puedo pensar en algunas posibilidades:
- Redirigir a una página de error.
- Ponga una etiqueta en cada página llamada "lblErrorText". Déjelo en blanco a menos que haya un error.
- Genere una excepción y deje que el manejo de errores estándar se ocupe de ello.
Esto se siente como una pregunta básica y por eso me disculpo, pero casi todo lo que he encontrado ha sido en referencia a excepciones inesperadas. No es que ninguna de las posibilidades anteriores sea difícil de implementar, pero me gustaría usar un método estándar recomendado si es posible.
NOTA: Gracias a todos por las respuestas. Quiero aclarar que los usuarios NO tendrían la capacidad de hacer clic en los enlaces a los registros que tienen permitido ver. Esta pregunta es más por el interés de estar a la defensiva. Por ejemplo, dado que el ID del registro está en la URL, alguien podría ingresar el ID de un registro prohibido en la barra de direcciones. O el usuario A que está autorizado puede enviar un correo electrónico al usuario B que no lo está. Parece que no estoy usando las palabras "excepción" y "error" de la manera correcta, pero espero que el escenario tenga sentido.
El usuario nunca verá un enlace a una página que no puede ver, pero el ID del registro está en la URL. Estoy tratando de evitar un escenario en el que alguien pueda modificar manualmente la URL para contener el ID de un registro que no está permitido. Este es el caso que estoy manejando aquí. Creo que lo que puedo hacer es intentar poner un control de "Texto de error" en la página maestra, así no tengo que modificar cada página para que esto funcione. – Mike
+1 para el comentario de prevención de errores. Un "error esperado" es un poco contradictorio, si se esperaba, ya deberías haber hecho algo al respecto. En mi humilde opinión, el cambio manual de una URL no se espera. Lo trataría como una excepción, manejado de la misma manera que lo haría con un usuario que ingresa una identificación inexistente en la URL. –