【问题标题】:500 Internal Server Error page in MVC [duplicate]MVC 中的 500 内部服务器错误页面 [重复]
【发布时间】:2013-09-15 15:59:57
【问题描述】:

我正在尝试为 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 错误的错误页面?

【问题讨论】:

    标签: c# asp.net-mvc-3 error-handling custom-errors


    【解决方案1】:

    想通了..

    在创建项目时,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 个错误。

    【讨论】:

    • 在 MVC5 中,全局过滤器注册是由 Global.asax.cs 中的 FilterConfig.RegisterGlobalFilter(GlobalFilters.Filters) 完成的,因此对于希望在 MVC 5 中使用此修复程序的任何人来说,这可能是你需要寻找
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2011-03-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多