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

  • 相关阅读:
    Git教程
    test
    Android中的权限机制
    Android中<uses-library>的理解
    权限机制
    总是听到有人说AndroidX,到底什么是AndroidX?Android和AndroidX的区别
    VMware Tools按钮变灰色,无法安装的解决方法
    VMware Tools (ubuntu系统)安装详细过程与使用
    Android studio常用快捷键
    CVE漏洞分析
  • 原文地址:https://www.cnblogs.com/calvinK/p/4895462.html
Copyright © 2011-2022 走看看