2012-04-27 15 views
7

Soy consciente de que hay muchas preguntas en SO acerca de Error al manejar en ASP.NET MVC.Ventajas de [HandleError] sobre Application_Error

que ver, sobre todo la gente está tratando de lograr cosas en tres formas:

  1. Crear una BaseController y anular el método OnException

  2. Usando [HandleError] o filtros de excepción personalizada.

  3. Application_Error evento en global.asax.cs

Las dos primeras formas no pueden manejar todas las excepciones y que sólo hacen que se plantean por métodos de acción/filtros, por lo que, obviamente, la tercera es va a ser el mejor enfoque para un manejador de excepciones globales.

Mi pregunta es ¿por qué debería elegir [HandleError]? ¿Qué beneficios trae que no pueda obtener Application_Error?

Finalmente, ¿quiero tomar en serio la sección customErrors en una aplicación MVC?

Nota: Mi requisito es habitual. Siempre que ocurra una excepción, regístrela y devuelva una página de error personalizada. La página de error personalizado puede cambiar según el código de estado.

Respuesta

8

El más obvio es que [HandleError] le permite manejar los errores de forma diferente en diferentes controladores y acciones. Es mucho más elegante que algún tipo de declaración de cambio en su controlador Application_Error.

Otra ventaja es que [HandleError] todavía tiene acceso al controlador y toda la bondad MVC que viene con él, por lo que todavía puede devolver un View o llamar a otra acción. Una vez que se cae al Application_Error, ha perdido ControllerContext y realmente no tiene opciones para usted excepto para redirigir.

+1

No veo muchas razones por las que alguien quiera manejar los errores de forma diferente en diferentes controladores y acciones. Ok, si hago esa lógica en [HandleError], entonces otra vez quiero hacer eso en global.asax ¿verdad? – VJAI

+1

¿página de error diferente para dispositivos móviles? Página de error personalizado para los usuarios? Fragmento de HTML para las solicitudes ajax? ¿Imagen de error personalizada para enlaces de imagen rotos? ¿Tiene acceso a páginas de error prohibidas para ciertos controladores? No es difícil pensar en razones para manejar los errores de forma diferente. – bhamlin

Cuestiones relacionadas