Exemple #1
0
        /// <summary>拦截异常</summary>
        /// <param name="ctx"></param>
        public override void OnException(ExceptionContext ctx)
        {
            // 判断控制器是否在管辖范围之内,不拦截其它控制器的异常信息
            if (!ctx.ExceptionHandled && AreaRegistrationBase.Contains(ctx.Controller))
            {
                //XTrace.WriteException(ctx.Exception);
                var ex = ctx.Exception?.GetTrue();
                if (ex != null)
                {
                    // 避免反复出现缺少文件
                    if (ex is HttpException hex && (UInt32)hex.ErrorCode == 0x80004005)
                    {
                        var url = HttpContext.Current.Request.RawUrl + "";
                        if (!NotFoundFiles.Contains(url))
                            NotFoundFiles.Add(url);
                        else
                            ex = null;
                    }

                    if (ex != null) XTrace.WriteException(ex);
                }

                ctx.ExceptionHandled = true;

                if (ctx.RequestContext.HttpContext.Request.IsAjaxRequest())
                {
                    var act = "操作";
                    if (ctx.RouteData.Values.ContainsKey("action")) act = "[{0}]".F(ctx.RouteData.Values["action"]);
                    ctx.Result = ControllerHelper.JsonTips("{0}失败!{1}".F(act, ex.Message));
                }
                else
                {
                    var vr = new ViewResult
                    {
                        ViewName = "CubeError"
                    };
                    vr.ViewBag.Context = ctx;

                    ctx.Result = vr;
                }
            }

            base.OnException(ctx);
        }
Exemple #2
0
 /// <summary>返回结果并跳转</summary>
 /// <param name="data">结果。可以是错误文本、成功文本、其它结构化数据</param>
 /// <param name="url">提示信息后跳转的目标地址,[refresh]表示刷新当前页</param>
 /// <returns></returns>
 protected virtual ActionResult JsonTips(Object data, String url = null) => ControllerHelper.JsonTips(data, url);
        /// <summary>拦截异常</summary>
        /// <param name="ctx"></param>
        public override void OnException(ExceptionContext ctx)
        {
            if (ctx.ExceptionHandled)
            {
                return;
            }

            //XTrace.WriteException(ctx.Exception);
            var ex = ctx.Exception?.GetTrue();

            if (ex != null)
            {
                // 避免反复出现缺少文件
                if (ex is HttpException hex && (UInt32)hex.ErrorCode == 0x80004005)
                {
                    var url = HttpContext.Current.Request.RawUrl + "";
                    if (!NotFoundFiles.Contains(url))
                    {
                        NotFoundFiles.Add(url);
                    }
                    else
                    {
                        ex = null;
                    }
                }

                // 拦截没有权限
                if (ex is NoPermissionException nex)
                {
                    ctx.Result           = ctx.Controller.NoPermission(nex);
                    ctx.ExceptionHandled = true;
                }

                if (ex != null)
                {
                    XTrace.WriteException(ex);
                }
            }
            if (ctx.ExceptionHandled)
            {
                return;
            }

            // 判断控制器是否在管辖范围之内,不拦截其它控制器的异常信息
            if (Setting.Current.CatchAllException || AreaRegistrationBase.Contains(ctx.Controller))
            {
                ctx.ExceptionHandled = true;

                var ctrl = "";
                var act  = "";
                if (ctx.RouteData.Values.ContainsKey("controller"))
                {
                    ctrl = ctx.RouteData.Values["controller"] + "";
                }
                if (ctx.RouteData.Values.ContainsKey("action"))
                {
                    act = ctx.RouteData.Values["action"] + "";
                }

                if (ctx.RequestContext.HttpContext.Request.IsAjaxRequest())
                {
                    if (act.IsNullOrEmpty())
                    {
                        act = "操作";
                    }
                    ctx.Result = ControllerHelper.JsonTips("[{0}]失败!{1}".F(act, ex.Message));
                }
                else
                {
                    var vr = new ViewResult
                    {
                        ViewName = "CubeError"
                    };
                    vr.ViewBag.Context = ctx;

                    var vd = vr.ViewData = ctx.Controller.ViewData;
                    vd.Model = new HandleErrorInfo(ex, ctrl, act);

                    ctx.Result = vr;
                }
            }

            base.OnException(ctx);
        }