MVC 中的 500 内部服务器错误页面

本文关键字:错误 服务器 内部 中的 MVC | 更新日期: 2023-09-27 18:31:06

我正在尝试为 MVC 站点设置自定义错误。我的 404 页面工作正常,但在测试服务器错误时,我收到默认消息:

抱歉,处理您的请求时出错。

而不是我的自定义页面。

我已经在web.config中设置了这个:

<customErrors mode="On"  defaultRedirect="~/Error/500">
    <error statusCode="404" redirect="~/Error/404" />
    <error statusCode="500" redirect="~/Error/500" />
</customErrors>

我的错误控制器如下:

public class ErrorController : Controller
{
    [ActionName("404")]
    public ActionResult NotFound()
    {
        return View();
    }
    [ActionName("500")]
    public ActionResult ServerError()
    {
        return View();
    }
}

我正在通过在我的一个视图中抛出异常来测试500错误页面:

[ActionName("contact-us")]
public ActionResult ContactUs()
{
    throw new DivideByZeroException();
    return View();
}

为什么只处理 404 错误?如何显示500错误的错误页面?

MVC 中的 500 内部服务器错误页面

通了。.

这是创建项目时留在Global.asax.cs中的一些样板代码:

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

特别:

filters.Add(new HandleErrorAttribute());

这将创建一个新的HandleErrorAttribute实例,该实例全局应用于我的所有视图。

在没有自定义的情况下,如果视图在使用此属性时引发错误,MVC 将在 Shared 文件夹中显示默认的Error.cshtml文件,该文件夹是: "Sorry, an error occurred while processing your request."的来源。

来自 HandleErrorAttribute 的文档:

默认情况下,当具有 HandleErrorAttribute 属性的操作方法引发任何异常时,MVC 将显示位于 ~/Views/Shared 文件夹中的"错误"视图。

注释掉这一行解决了问题,并允许我对 500 个错误使用自定义错误页面。