Exemple #1
0
        /// <summary>
        /// 使用AccessToken进行操作时,如果遇到AccessToken错误的情况,重新获取AccessToken一次,并重试。
        /// 使用此方法之前必须使用AccessTokenContainer.Register(_appId, _appSecret);或JsApiTicketContainer.Register(_appId, _appSecret);方法对账号信息进行过注册,否则会出错。
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="fun"></param>
        /// <param name="accessTokenOrAppId">AccessToken或AppId。如果为null,则自动取已经注册的第一个appId/appSecret来信息获取AccessToken。</param>
        /// <param name="retryIfFaild">请保留默认值true,不用输入。</param>
        /// <returns></returns>
        public static T TryCommonApi <T>(Func <string, T> fun, string accessTokenOrAppId = null, bool retryIfFaild = true) where T : WxJsonResult
        {
            string appId       = null;
            string accessToken = null;

            if (accessTokenOrAppId == null)
            {
                appId = AccessTokenContainer.GetFirstOrDefaultAppId();
                if (appId == null)
                {
                    throw new WeixinException("尚无已经注册的AppId,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!");
                }
            }
            else if (ApiUtility.IsAppId(accessTokenOrAppId))
            {
                if (!AccessTokenContainer.CheckRegistered(accessTokenOrAppId))
                {
                    throw new WeixinException("此appId尚未注册,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!");
                }

                appId = accessTokenOrAppId;
            }
            else
            {
                //accessToken
                accessToken = accessTokenOrAppId;
            }


            T result = null;

            try
            {
                if (accessToken == null)
                {
                    var accessTokenResult = AccessTokenContainer.GetTokenResult(appId, false);
                    accessToken = accessTokenResult.access_token;
                }
                result = fun(accessToken);
            }
            catch (ErrorJsonResultException ex)
            {
                if (!retryIfFaild &&
                    appId != null &&
                    ex.JsonResult.errcode == ReturnCode.获取access_token时AppSecret错误或者access_token无效)
                {
                    //尝试重新验证
                    var accessTokenResult = AccessTokenContainer.GetTokenResult(appId, true);
                    accessToken = accessTokenResult.access_token;
                    result      = TryCommonApi(fun, appId, false);
                }
                else
                {
                    result         = Activator.CreateInstance <T>();
                    result.errcode = ex.JsonResult.errcode;
                    result.errmsg  = ex.JsonResult.errmsg;
                }
            }
            return(result);
        }
Exemple #2
0
        /// <summary>
        /// 使用AccessToken进行操作时,如果遇到AccessToken错误的情况,重新获取AccessToken一次,并重试。
        /// 使用此方法之前必须使用AccessTokenContainer.Register(_appId, _appSecret);或JsApiTicketContainer.Register(_appId, _appSecret);方法对账号信息进行过注册,否则会出错。
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="fun"></param>
        /// <param name="accessTokenOrAppId">AccessToken或AppId。如果为null,则自动取已经注册的第一个appId/appSecret来信息获取AccessToken。</param>
        /// <param name="retryIfFaild">请保留默认值true,不用输入。</param>
        /// <returns></returns>
        public static T TryCommonApi <T>(Func <string, T> fun, string accessTokenOrAppId = null, bool retryIfFaild = true) where T : WxJsonResult
        {
            string appId       = null;
            string accessToken = null;

            if (accessTokenOrAppId == null)
            {
                appId = AccessTokenContainer.GetFirstOrDefaultAppId();
                if (appId == null)
                {
                    throw new UnRegisterAppIdException(null,
                                                       "尚无已经注册的AppId,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!");
                }
            }
            else if (ApiUtility.IsAppId(accessTokenOrAppId))
            {
                if (!AccessTokenContainer.CheckRegistered(accessTokenOrAppId))
                {
                    throw new UnRegisterAppIdException(accessTokenOrAppId, string.Format("此appId({0})尚未注册,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!", accessTokenOrAppId));
                }

                appId = accessTokenOrAppId;
            }
            else
            {
                accessToken = accessTokenOrAppId;//accessToken
            }


            T result = null;

            try
            {
                if (accessToken == null)
                {
                    var accessTokenResult = AccessTokenContainer.GetAccessTokenResult(appId, false);
                    accessToken = accessTokenResult.access_token;
                }
                result = fun(accessToken);
            }
            catch (ErrorJsonResultException ex)
            {
                if (retryIfFaild &&
                    appId != null &&
                    ex.JsonResult.errcode == ReturnCode.获取access_token时AppSecret错误或者access_token无效)
                {
                    //尝试重新验证
                    var accessTokenResult = AccessTokenContainer.GetAccessTokenResult(appId, true);//强制获取并刷新最新的AccessToken
                    accessToken = accessTokenResult.access_token;
                    result      = TryCommonApi(fun, appId, false);
                }
                else
                {
                    throw;
                }
            }

            return(result);
        }
Exemple #3
0
        public static T TryCommonApi <T>(Func <string, T> fun, string accessTokenOrAppId = null, bool retryIfFaild = true) where T : HiShopJsonResult
        {
            string text  = null;
            string text2 = null;

            if (accessTokenOrAppId == null)
            {
                text = AccessTokenContainer.GetFirstOrDefaultAppId();
                if (text == null)
                {
                    throw new Exception("尚无已经注册的AppId,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!");
                }
            }
            else if (ApiUtility.IsAppId(accessTokenOrAppId))
            {
                if (!AccessTokenContainer.CheckRegistered(accessTokenOrAppId))
                {
                    throw new Exception("此appId尚未注册,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!");
                }
                text = accessTokenOrAppId;
            }
            else
            {
                text2 = accessTokenOrAppId;
            }
            T val = null;

            try
            {
                if (text2 == null)
                {
                    AccessTokenResult tokenResult = AccessTokenContainer.GetTokenResult(text, false);
                    text2 = tokenResult.access_token;
                }
                return(fun(text2));
            }
            catch (Exception ex)
            {
                if (!string.IsNullOrEmpty(ex.Message) && ApiHandlerWapper.getTokenCount < ApiHandlerWapper.MAXGETTOKENCOUNT)
                {
                    ApiHandlerWapper.getTokenCount++;
                    AccessTokenResult tokenResult2 = AccessTokenContainer.GetTokenResult(text, true);
                    text2 = tokenResult2.access_token;
                    return(ApiHandlerWapper.TryCommonApi(fun, text, false));
                }
                throw;
            }
        }
        /// <summary>
        /// TryCommonApi 方法的基类
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="platformType">平台类型,PlatformType枚举</param>
        /// <param name="accessTokenContainer_GetFirstOrDefaultAppIdFunc">AccessTokenContainer中的GetFirstOrDefaultAppId()方法</param>
        /// <param name="accessTokenContainer_CheckRegisteredFunc">AccessTokenContainer中的bool CheckRegistered(appId,getNew)方法</param>
        /// <param name="accessTokenContainer_GetAccessTokenResultFunc">AccessTokenContainer中的AccessTokenResult GetAccessTokenResult(appId)方法</param>
        /// <param name="invalidCredentialValue">"ReturnCode.获取access_token时AppSecret错误或者access_token无效"枚举的值</param>
        /// <param name="fun"></param>
        /// <param name="accessTokenOrAppId"></param>
        /// <param name="retryIfFaild"></param>
        /// <returns></returns>
        public static T TryCommonApiBase <T>(
            PlatformType platformType,
            Func <string> accessTokenContainer_GetFirstOrDefaultAppIdFunc,
            Func <string, bool> accessTokenContainer_CheckRegisteredFunc,
            Func <string, bool, IAccessTokenResult> accessTokenContainer_GetAccessTokenResultFunc,
            int invalidCredentialValue,
            Func <string, T> fun, string accessTokenOrAppId = null, bool retryIfFaild = true) where T : BaseJsonResult
        {
            //ApiHandlerWapperFactory.ApiHandlerWapperFactoryCollection["s"] = ()=> new Senparc.Weixin.MP.AdvancedAPIs.User.UserInfoJson();

            //var platform = ApiHandlerWapperFactory.CurrentPlatform;//当前平台

            /*
             * 对于企业微信来说,AppId = key = CorpId+CorpSecret
             */

            string appId       = null;
            string accessToken = null;

            if (accessTokenOrAppId == null)
            {
                appId = accessTokenContainer_GetFirstOrDefaultAppIdFunc != null?accessTokenContainer_GetFirstOrDefaultAppIdFunc() : null;  // AccessTokenContainer.GetFirstOrDefaultAppId();

                if (appId == null)
                {
                    throw new UnRegisterAppIdException(null,
                                                       "尚无已经注册的AppId,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!模块:" + platformType);
                }
            }
            else if (ApiUtility.IsAppId(accessTokenOrAppId, platformType))
            {
                //if (!AccessTokenContainer.CheckRegistered(accessTokenOrAppId))
                if (!accessTokenContainer_CheckRegisteredFunc(accessTokenOrAppId))
                {
                    throw new UnRegisterAppIdException(accessTokenOrAppId, string.Format("此appId({0})尚未注册,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!模块:" + platformType, accessTokenOrAppId));
                }

                appId = accessTokenOrAppId;
            }
            else
            {
                accessToken = accessTokenOrAppId;//accessToken
            }

            T result = null;

            try
            {
                if (accessToken == null)
                {
                    var accessTokenResult = accessTokenContainer_GetAccessTokenResultFunc(appId, false); //AccessTokenContainer.GetAccessTokenResult(appId, false);
                    accessToken = accessTokenResult.access_token;
                }
                result = fun(accessToken);
            }
            catch (ErrorJsonResultException ex)
            {
                if (retryIfFaild &&
                    appId != null       //如果 appId 为 null,已经没有重试的意义(直接提供的 AccessToken 是错误的)
                                        //&& ex.JsonResult.errcode == ReturnCode.获取access_token时AppSecret错误或者access_token无效)
                    && (int)ex.JsonResult.errcode == invalidCredentialValue)
                {
                    //尝试重新验证
                    var accessTokenResult = accessTokenContainer_GetAccessTokenResultFunc(appId, true);//AccessTokenContainer.GetAccessTokenResult(appId, true);
                    //强制获取并刷新最新的AccessToken
                    accessToken = accessTokenResult.access_token;
                    result      = TryCommonApiBase(platformType,
                                                   accessTokenContainer_GetFirstOrDefaultAppIdFunc,
                                                   accessTokenContainer_CheckRegisteredFunc,
                                                   accessTokenContainer_GetAccessTokenResultFunc,
                                                   invalidCredentialValue,
                                                   fun, accessToken, false);
                }
                else
                {
                    ex.AccessTokenOrAppId = accessTokenOrAppId;
                    throw;
                }
            }
            catch (WeixinException ex)
            {
                ex.AccessTokenOrAppId = accessTokenOrAppId;
                throw;
            }

            return(result);
        }
        /// <summary>
        /// TryCommonApi 方法的基类
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="platformType">平台类型,PlatformType枚举</param>
        /// <param name="accessTokenContainer_GetFirstOrDefaultAppIdFunc">AccessTokenContainer中的GetFirstOrDefaultAppId()方法</param>
        /// <param name="accessTokenContainer_CheckRegisteredFunc">AccessTokenContainer中的bool CheckRegistered(appId,getNew)方法</param>
        /// <param name="accessTokenContainer_GetAccessTokenResultAsyncFunc">AccessTokenContainer中的AccessTokenResult GetAccessTokenResultAsync(appId)方法(异步方法)</param>
        /// <param name="invalidCredentialValue">"ReturnCode.获取access_token时AppSecret错误或者access_token无效"枚举的值</param>
        /// <param name="fun"></param>
        /// <param name="accessTokenOrAppId"></param>
        /// <param name="retryIfFaild"></param>
        /// <returns></returns>
        public static async Task <T> TryCommonApiBaseAsync <T>(
            PlatformType platformType,
            Func <string> accessTokenContainer_GetFirstOrDefaultAppIdFunc,
            Func <string, bool> accessTokenContainer_CheckRegisteredFunc,
            Func <string, bool, Task <IAccessTokenResult> > accessTokenContainer_GetAccessTokenResultAsyncFunc,
            int invalidCredentialValue,
            Func <string, Task <T> > fun, string accessTokenOrAppId = null, bool retryIfFaild = true) where T : BaseJsonResult
        {
            //ApiHandlerWapperFactory.ApiHandlerWapperFactoryCollection["s"] = ()=> new Senparc.Weixin.MP.AdvancedAPIs.User.UserInfoJson();

            //var platform = ApiHandlerWapperFactory.CurrentPlatform;//当前平台

            string appId       = null;
            string accessToken = null;

            if (accessTokenOrAppId == null)
            {
                appId = accessTokenContainer_GetFirstOrDefaultAppIdFunc();// AccessTokenContainer.GetFirstOrDefaultAppId();
                if (appId == null)
                {
                    throw new UnRegisterAppIdException(null,
                                                       "尚无已经注册的AppId,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!");
                }
            }
            else if (ApiUtility.IsAppId(accessTokenOrAppId, platformType))
            {
                //if (!AccessTokenContainer.CheckRegistered(accessTokenOrAppId))
                if (!accessTokenContainer_CheckRegisteredFunc(accessTokenOrAppId))
                {
                    throw new UnRegisterAppIdException(accessTokenOrAppId,
                                                       string.Format("此appId({0})尚未注册,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!",
                                                                     accessTokenOrAppId));
                }

                appId = accessTokenOrAppId;
            }
            else
            {
                accessToken = accessTokenOrAppId; //accessToken
            }


            T result = null;

            try
            {
                if (accessToken == null)
                {
                    var accessTokenResult = await accessTokenContainer_GetAccessTokenResultAsyncFunc(appId, false);//AccessTokenContainer.GetAccessTokenResultAsync(appId, false);

                    accessToken = accessTokenResult.access_token;
                }
                result = await fun(accessToken);
            }
            catch (ErrorJsonResultException ex)
            {
                if (retryIfFaild &&
                    appId != null       //如果 appId 为 null,已经没有重试的意义(直接提供的 AccessToken 是错误的)
                                        //&& ex.JsonResult.errcode == ReturnCode.获取access_token时AppSecret错误或者access_token无效)
                    && (int)ex.JsonResult.errcode == invalidCredentialValue)
                {
                    //尝试重新验证(如果是低版本VS,此处不能使用await关键字,可以直接使用xx.Result输出。VS2013不支持:无法在 catch 字句体中等待)
                    var accessTokenResult = await accessTokenContainer_GetAccessTokenResultAsyncFunc(appId, true);//AccessTokenContainer.GetAccessTokenResultAsync(appId, true);

                    //强制获取并刷新最新的AccessToken
                    accessToken = accessTokenResult.access_token;

                    result = await TryCommonApiBaseAsync(platformType,
                                                         accessTokenContainer_GetFirstOrDefaultAppIdFunc,
                                                         accessTokenContainer_CheckRegisteredFunc,
                                                         accessTokenContainer_GetAccessTokenResultAsyncFunc,
                                                         invalidCredentialValue,
                                                         fun, appId, false);

                    //result = TryCommonApiAsync(fun, appId, false);
                }
                else
                {
                    throw;
                }
            }
            return(result);
        }
        public static T TryCommonTicketApi <T>(Func <string, T> fun, string AppId, string strSecret, bool retryIfFaild = true) where T : WxJsonResult
        {
            string appId  = null;
            string ticket = null;

            if (AppId == null)
            {
                //appId = AccessTokenContainer.GetFirstOrDefaultAppId();
                if (appId == null)
                {
                    throw new UnRegisterAppIdException(null,
                                                       "尚无已经注册的AppId,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!");
                }
            }
            else if (ApiUtility.IsAppId(AppId))
            {
                //if (!AccessTokenContainer.CheckRegistered(AppId))
                //{
                //    throw new UnRegisterAppIdException(AppId, string.Format("此appId({0})尚未注册,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!", AppId));
                //}

                appId = AppId;
            }
            else
            {
                //accessToken
                ticket = AppId;
            }


            T result = null;

            try
            {
                if (ticket == null)
                {
                    var accessTokenResult = JsApiTicketContainer.GetJsApiTicketResult(appId, strSecret, Innocellence.Weixin.MP.CommonAPIs.CommonApi.GetTicket, false);
                    ticket = accessTokenResult.ticket;
                }
                result = fun(ticket);
            }
            catch (ErrorJsonResultException ex)
            {
                if (retryIfFaild &&
                    appId != null &&
                    ex.JsonResult.errcode == ReturnCode.Ticket不合法)
                {
                    JsApiTicketContainer.UpdateNull(appId, strSecret);

                    //尝试重新验证
                    var accessTokenResult = JsApiTicketContainer.GetJsApiTicketResult(appId, strSecret, Innocellence.Weixin.MP.CommonAPIs.CommonApi.GetTicket, false);//强制获取并刷新最新的AccessToken

                    if (ticket == accessTokenResult.ticket)
                    {
                        accessTokenResult = JsApiTicketContainer.GetJsApiTicketResult(appId, strSecret, Innocellence.Weixin.MP.CommonAPIs.CommonApi.GetTicket, true);
                    }


                    ticket = accessTokenResult.ticket;


                    result = fun(ticket);
                    //result = TryCommonApi(fun, appId,strSecret, false);
                }
                else
                {
                    throw;
                }
            }

            return(result);
        }
        /// <summary>
        /// TryCommonApi 方法的基类
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="platformType">平台类型,PlatformType枚举</param>
        /// <param name="accessTokenContainer_GetFirstOrDefaultAppIdAsyncFunc">AccessTokenContainer中的GetFirstOrDefaultAppId()方法</param>
        /// <param name="accessTokenContainer_CheckRegisteredAsyncFunc">AccessTokenContainer中的bool CheckRegistered(appId,getNew)方法</param>
        /// <param name="accessTokenContainer_GetAccessTokenResultAsyncFunc">AccessTokenContainer中的AccessTokenResult GetAccessTokenResultAsync(appId)方法(异步方法)</param>
        /// <param name="invalidCredentialValue">"ReturnCode.获取access_token时AppSecret错误或者access_token无效"枚举的值</param>
        /// <param name="fun"></param>
        /// <param name="accessTokenOrAppId">公众号、小程序中的 AppId,或企业微信中的 AppKey(由AppId+AppSecret组成)</param>
        /// <param name="retryIfFaild"></param>
        /// <returns></returns>
        public static async Task <T> TryCommonApiBaseAsync <T>(
            PlatformType platformType,
            Func <Task <string> > accessTokenContainer_GetFirstOrDefaultAppIdAsyncFunc,
            Func <string, Task <bool> > accessTokenContainer_CheckRegisteredAsyncFunc,
            Func <string, bool, Task <IAccessTokenResult> > accessTokenContainer_GetAccessTokenResultAsyncFunc,
            int invalidCredentialValue,
            Func <string, Task <T> > fun, string accessTokenOrAppId = null, bool retryIfFaild = true) where T : BaseJsonResult, new()
        {
            //ApiHandlerWapperFactory.ApiHandlerWapperFactoryCollection["s"] = ()=> new Senparc.Weixin.MP.AdvancedAPIs.User.UserInfoJson();

            //var platform = ApiHandlerWapperFactory.CurrentPlatform;//当前平台

            string appId       = null;
            string accessToken = null;

            if (accessTokenOrAppId == null)
            {
                appId = await accessTokenContainer_GetFirstOrDefaultAppIdAsyncFunc().ConfigureAwait(false);// AccessTokenContainer.GetFirstOrDefaultAppId();

                if (appId == null)
                {
                    var unregisterAppIdEx = new UnRegisterAppIdException(null, $"尚无已经注册的AppId,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!模块:{platformType}");
                    if (Config.ThrownWhenJsonResultFaild)
                    {
                        throw unregisterAppIdEx;//抛出异常
                    }
                    else
                    {
                        return(GetConfigErrorResult <T>(unregisterAppIdEx.Message));//返回 Json 错误结果
                    }
                }
            }
            else if (ApiUtility.IsAppId(accessTokenOrAppId, platformType))
            {
                //if (!AccessTokenContainer.CheckRegistered(accessTokenOrAppId))
                if (!await accessTokenContainer_CheckRegisteredAsyncFunc(accessTokenOrAppId))
                {
                    var unregisterAppIdEx = new UnRegisterAppIdException(null, $"此appId({accessTokenOrAppId})尚未注册,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!模块:{platformType}");
                    if (Config.ThrownWhenJsonResultFaild)
                    {
                        throw unregisterAppIdEx;//抛出异常
                    }
                    else
                    {
                        return(GetConfigErrorResult <T>(unregisterAppIdEx.Message));//返回 Json 错误结果
                    }
                }

                appId = accessTokenOrAppId;
            }
            else
            {
                accessToken = accessTokenOrAppId; //accessToken
            }


            T result = null;

            try
            {
                if (accessToken == null)
                {
                    var accessTokenResult = await accessTokenContainer_GetAccessTokenResultAsyncFunc(appId, false);//AccessTokenContainer.GetAccessTokenResultAsync(appId, false);

                    accessToken = accessTokenResult.access_token;
                }
                result = await fun(accessToken).ConfigureAwait(false);

                //当系统不抛出异常,且当前返回结果不成功,且允许重试的时候,在内部抛出一个异常,以便进行 Retry
                if (!Config.ThrownWhenJsonResultFaild &&
                    result is WxJsonResult &&
                    (result as WxJsonResult).errcode != ReturnCode.请求成功 &&
                    retryIfFaild
                    )
                {
                    var errorResult = result as WxJsonResult;
                    throw new ErrorJsonResultException(
                              string.Format("微信请求发生错误!错误代码:{0},说明:{1}",
                                            (int)errorResult.errcode, errorResult.errmsg), null, errorResult);
                }
            }
            catch (ErrorJsonResultException ex)
            {
                if (retryIfFaild &&
                    appId != null       //如果 appId 为 null,已经没有重试的意义(直接提供的 AccessToken 是错误的)
                                        //&& ex.JsonResult.errcode == ReturnCode.获取access_token时AppSecret错误或者access_token无效)
                    && (int)ex.JsonResult.errcode == invalidCredentialValue)
                {
                    //尝试重新验证(如果是低版本VS,此处不能使用await关键字,可以直接使用xx.Result输出。VS2013不支持:无法在 catch 字句体中等待)
                    var accessTokenResult = await accessTokenContainer_GetAccessTokenResultAsyncFunc(appId, true).ConfigureAwait(false);//AccessTokenContainer.GetAccessTokenResultAsync(appId, true);

                    //强制获取并刷新最新的AccessToken
                    accessToken = accessTokenResult.access_token;

                    result = await TryCommonApiBaseAsync(platformType,
                                                         accessTokenContainer_GetFirstOrDefaultAppIdAsyncFunc,
                                                         accessTokenContainer_CheckRegisteredAsyncFunc,
                                                         accessTokenContainer_GetAccessTokenResultAsyncFunc,
                                                         invalidCredentialValue,
                                                         fun, accessToken, false).ConfigureAwait(false);

                    //result = TryCommonApiAsync(fun, appId, false);
                }
                else
                {
                    //如果要求抛出异常,并且传入的是 AccessToken(AppId 为 null),那么已经没有必要重试,直接抛出异常
                    if (Config.ThrownWhenJsonResultFaild && appId == null)
                    {
                        throw;//抛出异常
                    }
                    else
                    {
                        return(GetJsonErrorResult <T>(ex.JsonResult));//返回 Json 错误结果
                    }
                }
            }
            catch (WeixinException ex)
            {
                ex.AccessTokenOrAppId = accessTokenOrAppId;

                //判断如果传进来的是 AccessToken,并且不抛出异常,那么这里不throw
                if (Config.ThrownWhenJsonResultFaild && ApiUtility.IsAppId(accessTokenOrAppId, platformType))
                {
                    throw;//抛出异常
                }
                else
                {
                    return(GetConfigErrorResult <T>(ex.Message));//返回 Json 错误结果
                }
            }

            return(result);
        }