MVC5返回状态500自定义页面,试过正常的解决方案

时间:2016-10-06 23:40:07

标签: asp.net-mvc http-status-codes internal-server-error custom-error-pages custom-errors

我希望能够控制重定向到不同的页面,或者对某些处理的错误返回不同的视图。我可以创建状态为404,403,418的自定义页面,并且它显示页面正常,但是当我尝试返回500时,它会使用默认页面覆盖它。我尝试过正常的解决方案。使用TrySkipIisCustomErrors通过IIS拦截500错误。我没有filter.cs并且在application_Start()中没有注册过滤器。我试过从方法中添加和删除[HandleError],这没有什么区别。

[NonAction]
    [HandleError]
    private ActionResult error(Exception e)
    {
        Response.StatusCode = 500;
        Response.StatusDescription = "Internal server error: " + e.Message;
        Response.TrySkipIisCustomErrors = true;

        ErrorModel errorModel = new ErrorModel();
        errorModel.error = e.Message;
        return View(viewName: "error", model: errorModel);
    }

这是将错误重定向到的方法,并返回要显示的视图。我可以将第一行更改为其他StatusCodes,它可以正常工作,但500不能。

1 个答案:

答案 0 :(得分:0)

原来这是Razor奇怪的侥幸。如果文档中没有标记,则RenderBody()会添加<body>标记,显然除非您在状态标题中返回500。然后它没有添加<body>标记,并且HTML返回格式错误,这导致了我的问题。