自定义了错误页面,但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内部服务器错误”页面,或者重新启动该页面,页面便会弹出新的报错项目,这是网页报错的信息便会告诉你是原因导致此错误发生。

 

posted on 2021-01-25 16:30  漫思  阅读(918)  评论(0编辑  收藏  举报

导航