Which HTTP Status Codes to cover for MVC error handling

后端 未结 4 2207
甜味超标
甜味超标 2021-02-13 15:09

I\'m currently developing custom error pages in my error handling code for my MVC application. But I\'m unclear as to which HTTP status codes I\'m meant to cover.

4条回答
  •  我寻月下人不归
    2021-02-13 15:50

    There may be another way: this solution uses 1 custom-error page to handle all types (I think?)

    [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";
    }
    
    

    @(!String.IsNullOrEmpty(ViewBag.StatusCode) ? ViewBag.StatusCode : "500 Error"):

    //@Model.ActionName //@Model.ContollerName //@Model.Exception.Message //@Model.Exception.StackTrace

提交回复
热议问题