Application_Error in global.asax not catching errors in WebAPI

后端 未结 2 1891
暖寄归人
暖寄归人 2020-12-01 10:20

For a project I am working on, one of the things we\'re implementing is something that we have code for in some of my teams older ASP.NET and MVC projects - an Applica

2条回答
  •  离开以前
    2020-12-01 10:44

    Abstract out your error handling logic from Application_Error into its own function. Create a Web API exception filter.

    //register your filter with Web API pipeline
    //this belongs in the Application_Start event in Global Application Handler class (global.asax)
    //or some other location that runs on startup
    GlobalConfiguration.Configuration.Filters.Add(new LogExceptionFilterAttribute());
    
    //Create filter
    public class LogExceptionFilterAttribute : ExceptionFilterAttribute 
    {
        public override void OnException(HttpActionExecutedContext context)
        {
            ErrorLogService.LogError(context.Exception);
        }
    }
    
    //in global.asax or global.asax.cs
    protected void Application_Error(object sender, EventArgs e)
    {
        Exception ex = Server.GetLastError();
        ErrorLogService.LogError(ex);
    } 
    
    //common service to be used for logging errors
    public static class ErrorLogService
    {
        public static void LogError(Exception ex)
        {
            //Email developers, call fire department, log to database etc.
        }
    }
    

    Errors from Web API do not trigger the Application_Error event. But we can create an exception filter and register it to handle the errors. Also see Global Error Handling in ASP.NET Web API 2.

提交回复
热议问题