try page net mvc management error customerrors custom create catch asp asp.net-mvc asp.net-mvc-2 application-error onexception

asp.net-mvc - page - onexception mvc



ErrorAttribute vs OnException frente a Application_Error (2)

Quiero manejar el error de toda la aplicación y mostrar una página ErrorView en asp.net mvc. Hay 3 formas de hacerlo (o lo sé).

1) ErrorAttribute in BaseController:Controller class. Can be used on individual Action/Controller/BaseController. 2) Override OnException() in the BaseController:Controller class. Will work on Controllers derived from BaseController 3) Application_Error in Global_aspx.

Cual es la mejor practica. ¿Cuál de estos métodos se debe usar para el manejo de errores en toda la aplicación o deberíamos usar múltiples o solo uno?

Si manejamos el error en ErrorAttribute Or / And OnException () en BaseController, aún debemos manejarlo en Application_Error ().

¿Cuándo deberíamos usar Application_Error ()?


  1. HandleErrorAttribute es un filtro MVC aplicado a través del atributo. Puede proporcionar un nombre de vista para mostrar si se produce una excepción y también puede especificar el tipo de excepción base (o específico) al que se aplica este filtro. Si no se proporciona ningún nombre de vista, buscará una vista llamada "Error". Como ya habrás notado, puedes aplicarlo a varios ámbitos. Le permite especificar una vista diferente de "página de error" basada en la excepción.

  2. Controller.OnException es un método que recibirá una llamada si alguna de tus acciones termina arrojando un error.

  3. Los dos anteriores son conceptos de MVC y parte de la interconexión de MVC, que se encuentra en la parte superior de la interconexión de ASP.NET, y si maneja la excepción utilizando lo anterior, no se propagará a Application_Error , pero cosas como http errors 404, 500 y lo haré si no recuerdo mal.

Qué usar?

Definitivamente busque en ELMAH para el registro de errores en toda la aplicación y mi blog sobre ELMAH y ASP.NET MVC

En cuanto a la visualización de páginas de error, debería estar bien con solo usar [HandleError] y HandleErrorAttribute , ya que maneja todo por usted (filtrado opcional y página de error personalizada opcional por tipo de excepción).


si desea manejar el error en el nivel de la aplicación, no aplique HandleError o OnException Override para el controlador.

Intente obtener el último error del objeto del servidor en Application_Error Handler, compruebe el Tipo de excepción y, según el tipo de excepción, defina la acción que desea realizar.

Para 404, es posible que desee establecer una acción diferente en el controlador para manejar.

Para 500, es posible que desee establecer una acción diferente en el controlador para manejar.

Para NON HTTPException (SQLException) es posible que desee enviar un correo electrónico.

Asegúrese de establecer el Código de estado de respuesta correcto para fines de SEO.