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))); }
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)); }
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); }
public void OnAuthorization(AuthorizationFilterContext context) { var appInfo = AppReqContext.Identity; if (appInfo == null) { AppWebInfoHelper.InitialDefaultAppIdentity(context.HttpContext); } }
public override Task OnAuthorizationAsync(AuthorizationFilterContext context) { var sysInfo = AppWebInfoHelper.GetOrSetAppIdentity(context.HttpContext); sysInfo.app_id = _appId; sysInfo.app_ver = _appVer; return(Task.CompletedTask); }
/// <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); }
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); }
/// <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); }
public override Task Invoke(HttpContext context) { // 防止忘记,独立初始化处理 AppWebInfoHelper.GetOrSetAppIdentity(context); return(_next.Invoke(context)); }