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

DGi*_*bbs 10 c# error-handling custom-errors asp.net-mvc-3

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

很抱歉,在执行您的要求时发生了一个错误.

而不是我的自定义页面.

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

<customErrors mode="On"  defaultRedirect="~/Error/500">
    <error statusCode="404" redirect="~/Error/404" />
    <error statusCode="500" redirect="~/Error/500" />
</customErrors>
Run Code Online (Sandbox Code Playgroud)

我的错误控制器如下:

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

    [ActionName("500")]
    public ActionResult ServerError()
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

DGi*_*bbs 19

想出这个......

Global.asax.cs在创建项目时留下了一些样板代码:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
   filters.Add(new HandleErrorAttribute());
}
Run Code Online (Sandbox Code Playgroud)

特别是:

filters.Add(new HandleErrorAttribute());
Run Code Online (Sandbox Code Playgroud)

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

如果没有自定义,如果视图在使用此属性时抛出错误,MVC将Error.cshtml在以下Shared文件夹中显示默认文件:"Sorry, an error occurred while processing your request."来自.

HandleErrorAttribute上的文档:

默认情况下,当具有HandleErrorAttribute属性的操作方法抛出任何异常时,MVC将显示位于〜/ Views/Shared文件夹中的Error视图.

评论此行解决了问题,并允许我使用自定义错误页面500错误.

  • 在MVC5中,全局过滤器注册由Global.asax.cs中的FilterConfig.RegisterGlobalFilter(GlobalFilters.Filters)完成,因此对于希望在MVC 5中使用此修复程序的任何人来说,可能需要查找此行 (2认同)