Recommended way to handle http errors inside my asp.net mvc 5 web application

前端 未结 1 1032
灰色年华
灰色年华 2021-01-22 19:26

i need a way to globally handle http errors inside my asp.net mvc web application. i did the following if the call to the action method is Ajax :-

$(document).re         


        
相关标签:
1条回答
  • 2021-01-22 20:09

    This solution works well for me...

    [1]: Remove all 'customErrors' & 'httpErrors' from Web.config

    [2]: Check 'App_Start/FilterConfig.cs' looks like this:

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

    [3]: in 'Global.asax' add this method:

    public void Application_Error(Object sender, EventArgs e)
    {
        Exception exception = Server.GetLastError();
        Server.ClearError();
    
        var routeData = new RouteData();
        routeData.Values.Add("controller", "ErrorPage");
        routeData.Values.Add("action", "Error");
        routeData.Values.Add("exception", exception);
    
        if (exception.GetType() == typeof(HttpException))
        {
            routeData.Values.Add("statusCode", ((HttpException)exception).GetHttpCode());
        }
        else
        {
            routeData.Values.Add("statusCode", 500);
        }
    
        Response.TrySkipIisCustomErrors = true;
        IController controller = new ErrorPageController();
        controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
        Response.End();
    }
    

    [4]: Add 'Controllers/ErrorPageController.cs'

    public class ErrorPageController : Controller
    {
        public ActionResult Error(int statusCode, Exception exception)
        {
             Response.StatusCode = statusCode;
             ViewBag.StatusCode = statusCode + " Error";
             return View();
        }
    }
    

    [5]: in 'Views/Shared/Error.cshtml'

    @model System.Web.Mvc.HandleErrorInfo
    @{
        ViewBag.Title = (!String.IsNullOrEmpty(ViewBag.StatusCode)) ? ViewBag.StatusCode : "500 Error";
    }
    
    <h1 class="error">@(!String.IsNullOrEmpty(ViewBag.StatusCode) ? ViewBag.StatusCode : "500 Error"):</h1>
    
    //@Model.ActionName
    //@Model.ContollerName
    //@Model.Exception.Message
    //@Model.Exception.StackTrace
    
    0 讨论(0)
提交回复
热议问题