自定义了错误页面,但IIS却显示http服务器内部500错误的解决办法
1. 激活异常过滤器
当自定义异常被捕获时,异常过滤器变为可用。为了能够获得自定义异常,打开Web.config文件,在System.Web.Section下方添加自定义错误信息。
<system.web>
<customErrors mode="On"></customErrors>
</system.web>
2. 创建Error View
在“~/Views/Shared”文件夹下,会发现存在“Error.cshtml”文件,该文件是由MVC 模板提供的,如果没有自动创建,该文件也可以手动完成。
3. 绑定异常过滤器
将过滤器绑定到action方法或controller上,不需要手动执行,打开 App_Start folder文件夹中的 FilterConfig.cs文件。在 RegisterGlobalFilters 方法中会看到
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); //filters.Add(new AuthorizeAttribute()); } }
如果需要删除全局过滤器,那么会将过滤器绑定到action 或controller层,如下:
[AdminFilter]
[HandleError]
public async Task<ActionResult> Upload(FileUploadViewModel model)
但是不建议这么做,最好是在全局中应用
4. 在View中显示错误信息
将Error View转换为HandleErrorInfo类的强类型View,并在View中显示错误信息。
@model HandleErrorInfo @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta name="viewport" content="width=device-width" /> <title>错误</title> </head> <body> <hgroup> <h1>错误。</h1> <h2>处理你的请求时出错。</h2> </hgroup> Error Message :@Model.Exception.Message<br /> Controller: @Model.ControllerName<br /> Action: @Model.ActionName </body> </html>
5. 运行后故意出错,显示的却是http服务器内部500错误,并不显示Error中的自定义错误信息。解决办法:
在IE浏览器下点击 工具-internet选项-高级,滚动条拉到最后,将“显示友好HTTP错误信息”前的勾去掉,确定,这时刷新“500内部服务器错误”页面,或者重新启动该页面,页面便会弹出新的报错项目,这是网页报错的信息便会告诉你是原因导致此错误发生。
漫思