自定义HandleErrorAttribute的错误不起作用

时间:2011-07-25 20:24:40

标签: asp.net-mvc-3 razor error-handling

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

这是我的代码:

的Global.asax.cs

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

ErrorControler.cs

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

    public ActionResult Error500()
    {
        return View();
    }
}

的Web.config

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

MyController.cs

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

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>

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

  应用程序中的服务器错误。

     

无法找到资源。

     

描述:HTTP 404.您正在寻找的资源(或其中一个   依赖项)可能已被删除,其名称已更改,或者是   暂时不可用。请查看以下网址并制作   确保它拼写正确。

     

请求的网址:/错误/错误500

我希望当任何控制器出现错误时,如果在web.config中未通知http状态代码,则会重定向到默认视图Error500

例如,在this article中,它处理DbException错误,但希望处理任何类型的错误。

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

1 个答案:

答案 0 :(得分:8)

如果您希望这样做,请从Global.asax

中删除/评论以下一行
filters.Add(new HandleErrorAttribute());

您基本上必须选择是否希望ASP.NET处理您的错误(web.config中的<customErrors>部分)或ASp.NET MVC(全局HandleErrorAttribute操作过滤器,这种方式要求你在web.config中打开自定义错误

或检查handling errors in ASP.NET MVC的替代方法(使用此方法,您仍然必须删除我在Global.asax中显示的行。)