自定义HandleErrorAttribute的错误不起作用

rid*_*nsb 2 error-handling razor asp.net-mvc-3

我已经阅读了很多文章和几篇文章(包括这里的stackoverflow),但不知道我做错了什么.

这是我的代码:

的Global.asax.cs

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

ErrorControler.cs

public class ErrorController : Controller
{
    public ActionResult Error404()
    {
        return View();
    }

    public ActionResult Error500()
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

Web.config文件

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

MyController.cs

public ActionResult Index()
{
    using (var db = new DataContext())
    {
        int a = 2, b = 0;
        var r = a / b;
        return View(r);
    }
}
Run Code Online (Sandbox Code Playgroud)

Error500.cshtml

@model System.Web.Mvc.HandleErrorInfo
@{
    ViewBag.Title = "Erro";
}

<h2>@ViewBag.Title</h2>
<div id="error-info">
    <p>Ocorreu um erro inexperado na página <a class="error-url" href="@Response["aspxerrorpath"]" title="Origem do erro">@Response["aspxerrorpath"]</a></p>
    <p>Se o erro persistir, por-favor, entre em contato com os administradores do site.</p>
    <div class="error-details">
        <p>@Model.Exception.Message</p>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

当我尝试访问该路径时,/MyController将显示以下消息:

'/'应用程序中的服务器错误.

无法找到该资源.

说明:HTTP 404.您要查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用.请查看以下网址,确保拼写正确.

请求的URL:/错误/错误500

我想在任何控制器上发生错误时发生这种情况,如果在web.config中没有通知http状态代码,它会重定向到默认视图 Error500

例如,在本文中,它处理DbException错误,但希望处理任何类型的错误.

404类型的错误(找不到页面)完美无缺.用户被重定向到页面Error404.cshtml

Dar*_*rov 8

如果您希望这样做,请从以下位置删除/评论以下行Global.asax:

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

您基本上必须选择是否希望ASP.NET处理您的错误(<customErrors>web.config中的部分)或ASp.NET MVC(全局HandleErrorAttribute操作筛选器,顺便说一下,它要求您在web.config中打开自定义错误) )

或者检查一种处理ASP.NET MVC中错误的替代方法(使用这种方法,您仍然必须删除我显示的行Global.asax).