Пример #1
0
        public async Task Invoke(HttpContext context)
        {
            Exception error;

            try
            {
                // 需要在此初始化,否则中间件依次退出后此值为空,下方异常无法捕获APP信息
                AppWebInfoHelper.InitialDefaultAppIdentity(context);

                await _next.Invoke(context);

                if (context.Response.StatusCode == (int)HttpStatusCode.NotFound)
                {
                    await ResponseEnd(context, new Resp(RespTypes.ObjectNull, "当前请求资源不存在!"));
                }

                return;
            }
            catch (Exception ex)
            {
                error = ex;
            }

            var code = LogHelper.Error(string.Concat("请求地址:", context.Request.Path, "错误信息:", error.Message, "详细信息:", error.StackTrace),
                                       nameof(ExceptionMiddleware));

#if DEBUG
            if (error != null)
            {
                throw error;
            }
#endif
            await ResponseEnd(context, new Resp(RespTypes.InnerError, string.Concat("服务暂时不可用!详情错误码:", code)));
        }
Пример #2
0
        private ActionResult GetRespResult(HttpContext context, Resp res)
        {
            // 服务类接口直接返回
            if (!p_IsWebSite)
            {
                return(new JsonResult(res));
            }

            var req    = context.Request;
            var isAjax = req.IsApiAjax();

            if (isAjax)
            {
                res.msg = AppWebInfoHelper.GetRedirectUrl(context, res, true);
                return(new JsonResult(res));
            }

            if (AppWebInfoHelper.CheckWebUnRedirectUrl(req.Path))
            {
                return(null);
            }

            var redirectUrl = AppWebInfoHelper.GetRedirectUrl(context, res, false);

            return(new RedirectResult(redirectUrl));
        }
Пример #3
0
        protected async Task ResponseEnd(HttpContext context, Resp res)
        {
            if (!p_IsWebSite)
            {
                await ClearCacheHeaders(context.Response, res);

                return;
            }

            if (context.Request.IsApiAjax())
            {
                res.msg = AppWebInfoHelper.GetRedirectUrl(context, res, true);
                await ClearCacheHeaders(context.Response, res);

                return;
            }

            if (AppWebInfoHelper.CheckWebUnRedirectUrl(context.Request.Path.ToString()))
            {
                if (_next != null)
                {
                    await _next.Invoke(context);
                }

                return;
            }

            var redirectUrl = AppWebInfoHelper.GetRedirectUrl(context, res, false);

            context.Response.Redirect(redirectUrl);
        }
Пример #4
0
        public void OnAuthorization(AuthorizationFilterContext context)
        {
            var appInfo = AppReqContext.Identity;

            if (appInfo == null)
            {
                AppWebInfoHelper.InitialDefaultAppIdentity(context.HttpContext);
            }
        }
Пример #5
0
        public override Task OnAuthorizationAsync(AuthorizationFilterContext context)
        {
            var sysInfo = AppWebInfoHelper.GetOrSetAppIdentity(context.HttpContext);

            sysInfo.app_id  = _appId;
            sysInfo.app_ver = _appVer;

            return(Task.CompletedTask);
        }
Пример #6
0
 /// <summary>
 ///  异常响应处理
 /// </summary>
 /// <param name="context"></param>
 /// <param name="res"></param>
 /// <param name="mode"></param>
 /// <returns></returns>
 private static async Task ExceptionResponse(HttpContext context, Resp res, AppSourceMode mode)
 {
     if (mode == AppSourceMode.Browser &&
         !AppWebInfoHelper.CheckIf404OrErrorUrl(context.Request.Path.ToString()))
     {
         var errUrl = res.IsRespType(RespTypes.ObjectNull) ? AppWebInfoHelper.NotFoundUrl : AppWebInfoHelper.ErrorUrl;
         if (!string.IsNullOrEmpty(errUrl))
         {
             string url = string.Concat(errUrl, "?ret=", res.ret, "&msg=", errUrl.UrlEncode());
             context.Response.Redirect(url);
             return;
         }
     }
     await ResponseJsonError(context.Response, res);
 }
Пример #7
0
        public override Task OnAuthorizationAsync(AuthorizationFilterContext context)
        {
            if (string.IsNullOrEmpty(_moduleName))
            {
                throw new NullReferenceException("请在当前Controller或父类中使用ModuleNameAttribute标注模块名称!");
            }

            var appInfo = AppWebInfoHelper.InitialDefaultAppIdentity(context.HttpContext);

            if (appInfo.app_type > _appType)
            {
                ResponseEnd(context, new Resp(RespTypes.NoPermission, "当前应用类型,无此接口权限!"));
                return(Task.CompletedTask);
            }

            appInfo.module_name = _moduleName;
            return(Task.CompletedTask);
        }
Пример #8
0
        /// <summary>
        ///  处理方法
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override async Task Invoke(HttpContext context)
        {
            Exception     error;
            Resp          errorResp = null;
            AppSourceMode mode      = AppSourceMode.BrowserWithHeader;

            try
            {
                // 需要在此初始化,否则中间件依次退出后此值为空,下方异常无法捕获APP信息
                var appInfo = AppWebInfoHelper.GetOrSetAppIdentity(context);
                mode = appInfo.SourceMode;

                await _next.Invoke(context);

                if (context.Response.StatusCode == (int)HttpStatusCode.NotFound)
                {
                    await ExceptionResponse(context, new Resp(RespTypes.ObjectNull, "当前请求资源不存在!"), mode);
                }

                return;
            }
            catch (RespException resEx)
            {
                errorResp = new Resp().WithException(resEx);
                error     = resEx;
            }
            catch (Exception ex)
            {
                error = ex;
            }
            var code = LogHelper.Error(string.Concat("请求地址:", context.Request.Path, "错误信息:", error.Message, "详细信息:", error.StackTrace),
                                       nameof(ExceptionMiddleware));

#if DEBUG
            if (error != null)
            {
                throw error;
            }
#endif
            var res = errorResp ?? new Resp(RespTypes.InnerError, string.Concat("服务暂时不可用!详情错误码:", code));
            await ExceptionResponse(context, res, mode);
        }
Пример #9
0
 public override Task Invoke(HttpContext context)
 {
     // 防止忘记,独立初始化处理
     AppWebInfoHelper.GetOrSetAppIdentity(context);
     return(_next.Invoke(context));
 }