如何使自定义错误页面在 ASP.NET MVC 4 中工作 [英] How to make custom error pages work in ASP.NET MVC 4
问题描述
我想要一个显示 500、404 和 403 的自定义错误页面.这是我所做的:
在 web.config 中启用自定义错误如下:
<错误状态代码=403"redirect="~/Views/Shared/UnauthorizedAccess.cshtml"/><错误状态代码="404"redirect="~/Views/Shared/FileNotFound.cshtml"/></customErrors> 将
HandleErrorAttribute
注册为FilterConfig
类中的全局操作过滤器,如下所示:public static void RegisterGlobalFilters(GlobalFilterCollection filters){过滤器.添加(新的CustomHandleErrorAttribute());过滤器.添加(新授权属性());}
为上述每条消息创建了一个自定义错误页面.500 的默认值已经开箱即用.
在每个自定义错误页面视图中声明页面模型为
System.Web.Mvc.HandleErrorInfo
对于 500,它显示自定义错误页面.对于其他人,它没有.
有什么我遗漏的吗?
当我通读 HandleErrorAttribute
类的 OnException
方法中的代码时,看起来这并不是显示自定义错误的全部内容,它仅处理500.
我需要做什么来处理其他错误?
我当前的设置(在 MVC3 上,但我认为它仍然适用)依赖于有一个 ErrorController
,所以我使用:>
<customErrors mode="On" defaultRedirect="~/Error"><error redirect="~/Error/NotFound" statusCode="404"/></customErrors></system.web>
控制器包含以下内容:
公共类 ErrorController : 控制器{公共视图结果索引(){返回视图(错误");}公共 ViewResult NotFound(){Response.StatusCode = 404;//您可能希望将其设置为 200返回视图(未找到");}}
视图就是你实现它们的方式.不过,我倾向于添加一些逻辑,以在应用程序处于调试模式时显示堆栈跟踪和错误信息.所以 Error.cshtml 看起来像这样:
@model System.Web.Mvc.HandleErrorInfo@{布局 = "_Layout.cshtml";ViewBag.Title = "错误";}<div class="list-header clearfix"><span>错误</span>
<div class="list-sfs-holder"><div class="alert alert-error">发生意外的错误.请联系系统管理员.
@if(模型!= null && HttpContext.Current.IsDebuggingEnabled){<div><p><b>例外:</b>@Model.Exception.Message
<b>控制器:</b>@Model.ControllerName
<b>动作:</b>@Model.ActionName</p><div style="overflow:scroll"><预>@Model.Exception.StackTrace