如何使自定义错误页在ASP.NET MVC 4中工作

我想要一个自定义错误页面显示为500,404和403。以下是我所做的:

  1. 在web.config中启用自定义错误,如下所示:

    <customErrors mode=“On”
    defaultRedirect=“~/Views/Shared/Error.cshtml”>
    <错误状态代码=“403”
    重定向=“~/Views/Shared/UnauthorizedAccess.cshtml”/>
    <错误状态代码=“404”
    重定向=“~/Views/Shared/FileNotFound.cshtml”/>
    &lt/客户错误>
    
  2. FilterConfig类中将HandleErrorAttribute注册为全局操作筛选器,如下所示:

    公共静态无效注册表全局过滤器(全局过滤器收集过滤器)
    {
    添加(新的CustomHandleErrorAttribute());
    filters.Add(新的AuthorizeAttribute());
    }
    
  3. 为上述每条消息创建了自定义错误页。500的默认值已经是现成的了

  4. 在每个自定义错误页面视图中声明页面的模型为System.Web.Mvc.HandleErrorInfo

对于500,它显示自定义错误页面。对其他人来说,情况并非如此

我有什么遗漏吗

在我阅读HandleErrorAttribute类的OnException方法中的代码时,显示自定义错误的方法似乎并不完全是这样,它只处理500个错误

我必须如何处理其他错误

我当前的设置(在MVC3上,但我认为它仍然适用)依赖于拥有ErrorController,因此我使用:

<系统.web>
<customErrors mode=“On”defaultRedirect=“~/Error”>
<错误重定向=“~/error/NotFound”statusCode=“404”/>
&lt/客户错误>
&lt/系统.web>

控制器包含以下内容:

公共类错误控制器:控制器
{
公共视图结果索引()
{
返回视图(“错误”);
}
公共视图结果未找到()
{
Response.StatusCode=404;//您可能希望将其设置为200
返回视图(“未找到”);
}
}

视图就是您实现它们的方式。不过,我倾向于添加一些逻辑,以便在应用程序处于调试模式时显示堆栈跟踪和错误信息。所以Error.cshtml看起来像这样:

@model System.Web.Mvc.HandleErrorInfo
@{
Layout=“_Layout.cshtml”;
ViewBag.Title=“错误”;
}
<div class=“列表标题clearfix”>
<span>错误&lt/span>
&lt/部门>
<div class=“列出sfs持有人”>
<div class=“警报错误”>
发生意外错误。请与系统管理员联系。
&lt/部门>
@if(Model!=null&HttpContext.Current.IsDebuggingEnabled)
{
<div>
<p>
<b>异常:</b>@Model.Exception.Message<br/>
<b>控制器:</b>@Model.ControllerName<br/>
<b>操作:</b>@Model.ActionName
</p>
<div style=“溢出:滚动”>
<pre>
@Model.Exception.StackTrace
</pre>
</div>
</div>
}
&lt/部门>

发表评论