2011-07-06 11 views
19

Quiero manejar excepciones no detectadas en mi aplicación ASP.NET MVC 3, de modo que pueda comunicar el error al usuario a través de la vista de error de la aplicación. ¿Cómo intercepto las excepciones no detectadas? Me gustaría poder hacer esto globalmente, no para cada controlador (aunque no me importaría saber cómo hacer esto también).¿Cómo manejo las excepciones no detectadas en una aplicación ASP.NET MVC 3?

Respuesta

19

Puede configurar un filtro de error global en Global.asax

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); 
} 

Los conjuntos anteriores un gestor de errores por defecto que dirige todas las excepciones a la vista estándar de error. La vista de error se escribe en un objeto modelo System.Web.Mvc.HandleErrorInfo que expone los detalles de la excepción.

También debe activar los errores personalizados en el archivo web.config para ver esto en su máquina local.

<customErrors mode="On"/> 

También se pueden definir varios filtros para los tipos de error específicos:

filters.Add(new HandleErrorAttribute 
{ 
    ExceptionType = typeof(SqlException), 
    View = "DatabaseError", 
    Order = 1 
}); 

/* ...other error type handlers here */ 

filters.Add(new HandleErrorAttribute()); // default handler 

Tenga en cuenta que sólo se HandleErrorAttribute controlar los errores que se producen en el interior de la tubería MVC (es decir, 500 errores).

+0

Gracias, este funcionó muy bien :) – aknuds1

10

puede utilizar filtros HandleErrorAttribute,

[ErrorHandler(ExceptionType = typeof(Exception), View = "UnhandledError", Order = 1)] 
public abstract class BaseController : Controller 

     { 
    } 

básicamente puede hacer que este en la parte superior de un controlador de base y definir la UnhandledError.cshtml en la carpeta compartida ve.

Y si desea registrar los errores no controlados antes de mostrar el mensaje de error, puede extender la clase HandleErrorAttribute y poner la lógica para hacer el registro dentro del método OnException.

public class MyErrorHandlerAttribute : HandleErrorAttribute 
    { 


     public override void OnException(ExceptionContext exceptionContext) 
     { 
      Logger.Error(exceptionContext.Exception.Message,exceptionContext.Exception); 
      base.OnException(exceptionContext); 
     } 
    } 
4

Para mayor completitud, también está el manejador Application_Error en Global.asax.

2

con el fin de hacer este trabajo que seguirán los siguientes blog post y luego hacer la siguiente adición a los dos archivos Web.config (el uno raíz y el otro en la carpeta Vistas) dentro del nodo <system.web>:

... 
    <system.web> 
    <customErrors mode="On"/> 
    ... 

creo que sirve ...

3

Global Error Handling

  1. guardar en web.config

    <customErrors mode="On"/>
  2. error se mostrará en Error.cshtml que es compartida reside en carpeta

  3. Cambio en Error.cshtml
 
    @model System.Web.Mvc.HandleErrorInfo 

    @{ 
     ViewBag.Title = "Error"; } 


    <h2> 
     <p>Sorry, an error occurred while processing your request.</p> 
     <p>Controller Name: @Model.ControllerName</p> 
     <p>Action Name : @Model.ActionName</p> 
     <p>Message: @Model.Exception.Message</p> </h2> 

Cuestiones relacionadas