asp.net mvc HandleErrorAttribute 异常错误处理 无效!

系统未知bug,代码没有深究。 

现象:filters.Add(new HandleErrorAttribute()); 使用了全局的异常处理过滤。

HandleErrorAttribute 核心代码:

public virtual void OnException(ExceptionContext filterContext)
        {
            if (filterContext == null)
            {
                throw new ArgumentNullException("filterContext");
            }
            if (filterContext.IsChildAction)
            {
                return;
            }
            if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled)
            {
                return;
            }
            Exception exception = filterContext.Exception;
            if (new HttpException(null, exception).GetHttpCode() != 500)
            {
                return;
            }
            if (!this.ExceptionType.IsInstanceOfType(exception))
            {
                return;
            }
            string controllerName = (string)filterContext.RouteData.Values["controller"];
            string actionName = (string)filterContext.RouteData.Values["action"];
            HandleErrorInfo model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);
            filterContext.Result = new ViewResult
            {
                ViewName = this.View,
                MasterName = this.Master,
                ViewData = new ViewDataDictionary<HandleErrorInfo>(model),
                TempData = filterContext.Controller.TempData
            };
            filterContext.ExceptionHandled = true;
            filterContext.HttpContext.Response.Clear();
            filterContext.HttpContext.Response.StatusCode = 500;
            filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
        }

 经过测试,下面这些代码执行完成之后,页面还是显示黄页黄页。而不是系统 默认的Error视图

web.config中配置:customErrors mode="RemoteOnly"

 filterContext.ExceptionHandled = true;  filterContext.HttpContext.Response.Clear();  filterContext.HttpContext.Response.StatusCode = 500;  filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;

有一个项目情况一定是这样的,其他好几个项目正常。

修复代码如下,使用自定义类继承自HandleErrorAttribute  重写方法OnException

加入代码

base.OnException(filterContext); if (filterContext.ExceptionHandled) filterContext.HttpContext.ClearError();

关键代码:filterContext.HttpContext.ClearError().

具体原因不明,还有待查证,那位大哥有碰到过??? 猜测可能和httpcontext最后执行的逻辑判断有问题,比如config的配置,运行时参数的不一致等

回家查看asp.net的源代码去,找找ExceptionHandled预计能找到点东西

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏听雨堂

ASP.NET TreeView相关问题

1、用代码在treeview web控件中,添加node的方法 表字段:编号,父编号,名称 数据: 1 0 中华人民共和国 2 1 湖南 3 1 湖北...

1997
来自专栏草根专栏

用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传

这部分就讲从angular5的客户端上传图片到asp.net core 2.0的 web api. 这是需要的源码: https://pan.baidu.com...

3935
来自专栏张善友的专栏

asp.net mvc SelectList 的selected 失效及解决方案

在asp.net mvc的强类型视图(strongly typed view)下拉列表,在Controller中设定的选择项在View上选中失效了。 下面是我的...

21710
来自专栏函数式编程语言及工具

Akka(29): Http:Server-Side-Api,Low-Level-Api

 Akka-http针对Connection的两头都提供了方便编程的Api,分别是Server-Side-Api和Client-Side-Api。通过这两个Ap...

2088
来自专栏jeremy的技术点滴

解决zookeeper导致tomcat停止时报异常的问题

8375
来自专栏james大数据架构

在ASP.NET MVC 中获取当前URL、controller、action

一、URL的获取很简单,ASP.NET通用: 【1】获取 完整url (协议名+域名+虚拟目录名+文件名+参数)  string url=Request.U...

2349
来自专栏ASP.NET MVC5 后台权限管理系统

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(23)-权限管理系统-角色组模块

接下来我们的目标是 角色组管理 角色组权限设置 用户管理 把角色组授权给用户 给用户分配角色组 所以最少我们还要讲多5讲才能结束这个管理系统,经过之前的样例程序...

3219
来自专栏晓晨的专栏

Asp.Net MVC 获取当前 Controller Action Area

1642
来自专栏.NET开发那点事

.NET开源高性能Socket通信中间件Helios介绍及演示

  Helios是一套高性能的Socket通信中间件,使用C#编写。Helios的开发受到Netty的启发,使用非阻塞的事件驱动模型架构来实现高并发高吞吐量。H...

1992
来自专栏飞扬的花生

将Json数据保存在静态脚本文件中读取

      一些常用的数据例如一些网站的区域信息被改变的可能性不大,一般不通过请求获取,于是我们选择存在静态文件中,例如以下Demo: 1.动态加载Json数据...

2566

扫码关注云+社区