zoukankan      html  css  js  c++  java
  • 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;
            }
    View Code

     经过测试,下面这些代码执行完成之后,页面还是显示黄页黄页。而不是系统 默认的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预计能找到点东西

  • 相关阅读:
    结对项目进度1
    学期总结之数学建模软件——LINGO和R
    四则运算计算程序(完成)
    学期总结之数学建模软件——编译原理
    图形学算法之NichollLeeNicholl算法
    学期总结之3D游戏开发
    《构建之法》读后感
    四则运算计算程序(初步)
    结对项目进度2
    Spring IOC原理解析
  • 原文地址:https://www.cnblogs.com/calvinK/p/4895462.html
Copyright © 2011-2022 走看看