7.26.2011

Manejo de Errores con el ASP.NET MVC

Una de las características más interesantes del MVC es el manejo de errores que tiene el framework. Por defecto, el MVC trae una vista para el manejo de errores en el campo visual, la cual se despliega cada vez que se produce un error en el sitio Web. Si vemos la estructura de nuestro proyecto al crearlo usando MVC 3, nos vamos a dar cuenta que en el folder Shared de las vistas vamos a ver una vista llamada Error.aspx.

image

En este caso, cambiamos el texto de la vista Error.aspx para que despliegue un mensaje un poco más “amigable” al usuario final.

image

Ahora procedemos a “provocar” un error en el sitio Web para verificar que el despliegue de la vista funcione. Para esto vamos a solicitar una vista que no exista en el método Index del HomeController.

image

Si ejecutamos el código no nos aparece la vista de errores que modificamos anteriormente, pero ¿por qué?

imageLo que nos faltó habilitar fue la propiedad CustomErrors=On en el web.config. Esto habilita el mecanismo para desplegar errores de forma segura y “amigable” en nuestras aplicaciones ASP.NET MVC.

image

Ahora si ejecutamos de nuevo la aplicación provocando el error, podemos ver la vista que modificamos desplegada.

image

Sin embargo, el Framework del MVC no se queda ahí. Este nos permite ser más granulares en lo que respecta al manejo de errores. Por ejemplo, podemos definir un tipo de vista que se pueda utilizar en las acciones que yo específicamente le indico. Vamos a crear una nueva vista, que llamaremos “ErroresPersonalizados”. Esta lista estará tipificada con el tipo HandleErrorInfo del System.Web.Mvc. Este tipo será el que utilicemos en el modelo de la vista; es decir, cuando se invoca la vista, se le pasa en el modelo, la variable que se produjo en el error – en este caso la excepción.

image

La vista generada esta tipificada con el tipo que le indicamos en el model class.

image

Ahora vamos a modificar la vista para presentar de forma personalizada la excepción, nótese que ahora el modelo tiene todas las propiedades de la excepción que se va a producir.

image

El script HTML que vamos a usar en esta forma es el siguiente:

image

Ahora en la acción Index del controlador, vamos a especificar vía un ActionFilter, la vista de manejo de error que se debe de mostrar en caso de que ocurra un error en la misma.

image

Al ejecutar el código anterior, la vista que nos aparece es la siguiente:

image

Si se produce un error en cualquier otra acción de cualquier otro controlador se presentará la vista estándar – Error.aspx – pero si se produce un error en la acción Index del HomeController se verá la vista anterior.

Pero el MVC va más allá en el tema de la granularidad del manejo de errores. Supongamos que queremos que todas las acciones desplieguen los errores en la vista estándar, solo que deseamos que si la acción Index del HomeController lanza una excepción del tipo InvalidOperationException, entonces se invoque la vista anterior. Para esto, procedemos a modificar el atributo de manejo de errores con la siguiente información:

image

En el código anterior se lanza un error del tipo InvalidOperationException en el código para probar que la vista adecuada sea la que se presente. Si en esa acción se produce cualquier otra excepción, se presenta la vista estandar Error.aspx y no la vista ErroresPersonalizados.aspx

Etiquetas de Technorati: ,

No hay comentarios: