Application_Error in global.asax not catching errors in WebAPI

后端 未结 2 1901
暖寄归人
暖寄归人 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:54

    In my case, i prefer not use Web.config. Then i created code above in Global.asax file:

    protected void Application_Error(object sender, EventArgs e)
        {
            Exception ex = Server.GetLastError();
    
            //Not Found (When user digit unexisting url)
            if(ex is HttpException && ((HttpException)ex).GetHttpCode() == 404)
            {
                HttpContextWrapper contextWrapper = new HttpContextWrapper(this.Context);
    
                RouteData routeData = new RouteData();
                routeData.Values.Add("controller", "Error");
                routeData.Values.Add("action", "NotFound");
    
                IController controller = new ErrorController();
                RequestContext requestContext = new RequestContext(contextWrapper, routeData);
                controller.Execute(requestContext);
                Response.End();
            }
            else //Unhandled Errors from aplication
            {
                ErrorLogService.LogError(ex);
                HttpContextWrapper contextWrapper = new HttpContextWrapper(this.Context);
    
                RouteData routeData = new RouteData();
                routeData.Values.Add("controller", "Error");
                routeData.Values.Add("action", "Index");
    
                IController controller = new ErrorController();
                RequestContext requestContext = new RequestContext(contextWrapper, routeData);
                controller.Execute(requestContext);
                Response.End();
            }
        }
    

    And thtat is my ErrorController.cs

    public class ErrorController : Controller
    {
        // GET: Error
        public ViewResult Index()
        {
            Response.StatusCode = 500;
            Exception ex = Server.GetLastError();
            return View("~/Views/Shared/SAAS/Error.cshtml", ex);
        }
    
        public ViewResult NotFound()
        {
            Response.StatusCode = 404;
            return View("~/Views/Shared/SAAS/NotFound.cshtml");
        }
    }
    

    And that is my ErrorLogService.cs copyed from @mason class

    //common service to be used for logging errors
    public static class ErrorLogService
    {
        public static void LogError(Exception ex)
        {
            //Do what you want here, save log in database, send email to police station
        }
    }
    

提交回复
热议问题