我想要一个自定义错误页面显示为500,404和403。以下是我所做的:
-
在web.config中启用自定义错误,如下所示:
<;customErrors mode=“On” defaultRedirect=“~/Views/Shared/Error.cshtml”>; <;错误状态代码=“403” 重定向=“~/Views/Shared/UnauthorizedAccess.cshtml”/>; <;错误状态代码=“404” 重定向=“~/Views/Shared/FileNotFound.cshtml”/>; </客户错误>; -
在
FilterConfig类中将HandleErrorAttribute注册为全局操作筛选器,如下所示:公共静态无效注册表全局过滤器(全局过滤器收集过滤器) { 添加(新的CustomHandleErrorAttribute()); filters.Add(新的AuthorizeAttribute()); } -
为上述每条消息创建了自定义错误页。500的默认值已经是现成的了
-
在每个自定义错误页面视图中声明页面的模型为
System.Web.Mvc.HandleErrorInfo
对于500,它显示自定义错误页面。对其他人来说,情况并非如此
我有什么遗漏吗
在我阅读HandleErrorAttribute类的OnException方法中的代码时,显示自定义错误的方法似乎并不完全是这样,它只处理500个错误
我必须如何处理其他错误
我当前的设置(在MVC3上,但我认为它仍然适用)依赖于拥有ErrorController,因此我使用:
<;系统.web>;
<;customErrors mode=“On”defaultRedirect=“~/Error”>;
<;错误重定向=“~/error/NotFound”statusCode=“404”/>;
</客户错误>;
</系统.web>;
控制器包含以下内容:
公共类错误控制器:控制器
{
公共视图结果索引()
{
返回视图(“错误”);
}
公共视图结果未找到()
{
Response.StatusCode=404;//您可能希望将其设置为200
返回视图(“未找到”);
}
}
视图就是您实现它们的方式。不过,我倾向于添加一些逻辑,以便在应用程序处于调试模式时显示堆栈跟踪和错误信息。所以Error.cshtml看起来像这样:
@model System.Web.Mvc.HandleErrorInfo
@{
Layout=“_Layout.cshtml”;
ViewBag.Title=“错误”;
}
<;div class=“列表标题clearfix”>;
<;span>;错误</span>;
</部门>;
<;div class=“列出sfs持有人”>;
<;div class=“警报错误”>;
发生意外错误。请与系统管理员联系。
</部门>;
@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>;
}
</部门>;