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预计能找到点东西

  • 相关阅读:
    ST表学习笔记
    LCA学习笔记
    $ZOJ 2432 Greatest Common Increasing Subsequence$
    $SP15637 GNYR04H - Mr Youngs Picture Permutations$
    Noip2016换教室
    洛谷4718【模板】Pollard-Rho算法
    CQOI2016 密钥破解
    Poj3696 The Lukiest Number
    Noip2012同余方程
    同余
  • 原文地址:https://www.cnblogs.com/calvinK/p/4895462.html
Copyright © 2011-2022 走看看