【发布时间】:2012-12-04 00:25:44
【问题描述】:
我想要一个显示 500、404 和 403 的自定义错误页面。这是我所做的:
-
在 web.config 中启用自定义错误如下:
<customErrors mode="On" defaultRedirect="~/Views/Shared/Error.cshtml"> <error statusCode="403" redirect="~/Views/Shared/UnauthorizedAccess.cshtml" /> <error statusCode="404" redirect="~/Views/Shared/FileNotFound.cshtml" /> </customErrors> -
将
HandleErrorAttribute注册为FilterConfig类中的全局操作过滤器,如下所示:public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new CustomHandleErrorAttribute()); filters.Add(new AuthorizeAttribute()); } 为上述每条消息创建了一个自定义错误页面。 500 的默认值已开箱即用。
在每个自定义错误页面视图中声明该页面的模型为
System.Web.Mvc.HandleErrorInfo
对于 500,它显示自定义错误页面。对于其他人来说,它没有。
我有什么遗漏吗?
当我通读 HandleErrorAttribute 类的 OnException 方法中的代码时,看起来这并不是显示自定义错误的全部,它只处理 500 个错误。
如何处理其他错误?
【问题讨论】:
-
这个设置的奇怪之处在于您重定向到视图,而不是控制器操作。例如,谁应该渲染这些视图并传入模型?只是想。
-
这里的大多数答案要么不能处理所有情况,要么导致 Web 服务器以“不正确”的方式响应,即重定向到错误页面而不是返回错误响应。如果您关心服务器以 Web 服务器所期望的方式响应,那么这里有一篇非常详细的文章:benfoster.io/blog/aspnet-mvc-custom-error-pages。请注意,它不像这里的答案那么简单,所以如果您想要一个简单的答案,只需使用以下答案之一。
-
这是另一篇关于 asp.net 错误处理的各种技术的精彩文章dusted.codes/…
标签: asp.net asp.net-mvc asp.net-mvc-4