예제 #1
0
        /// <summary>
        /// 请求
        /// </summary>
        /// <param name="httpInvokes"></param>
        /// <param name="loadArgs">Http基础请求添加额外字段</param>
        /// <returns></returns>
        public static Result Requests(this HttpInvokes httpInvokes, Func <Dictionary <string, string> > loadArgs = null)
        {
            var result = Run(httpInvokes, loadArgs);

            return(result);
        }
        private static Result Run(HttpInvokes httpInvokes, Func <Dictionary <string, string> > loadArgs = null)
        {
            Init();
            if (httpInvokes == null || httpInvokes.HttpCommands == null)
            {
                throw new Exception("请求参数不正确");
            }
            var postdata = _jsonConvert.SerializeObject(new
            {
                AppID        = httpInvokes.AppID,
                HttpCommands = httpInvokes.HttpCommands
            });
            Dictionary <string, string> dic;

            if (loadArgs != null)
            {
                dic = loadArgs() ?? new Dictionary <string, string>();
            }
            else
            {
                dic = new Dictionary <string, string>();
            }
            #region loadArgs
            dic.Add("channel", GetPath());
            var _login = _logins[_3rdHttp];
            if (_token != null && _login.NeedLogin(httpInvokes.AppID))
            {
                if (_login.IsLocalToken(httpInvokes.AppID))
                {
                    dic.Add("uid", _login.UID);
                    dic.Add("token", _login.Token);
                }
                else
                {
                    dic.Add("uid", _token.UID);
                    dic.Add("token", _token.Token);
                }
            }
            if (httpInvokes.ExexuteID.HasValue)
            {
                dic.Add("executeid", httpInvokes.ExexuteID.Value.ToString());
            }
            dic.Add("cip", ip);
            dic.Add("sendertime", httpInvokes.SenderTime.ToString("yyyy-MM-dd HH:mm:ss.fff"));
            #endregion
            var ret = HttpHelper.PostRequest(_3rdHttp + "Http/CHttpRequests", postdata, dic, _timeout);
            if (ret.IsSuccess == false)
            {
                var error = ret.GetWrong();
                if (error == Wrong.UnLogin || error == Wrong.LoginTimeOut)
                {
                    SetToken(GetLogin().Login(httpInvokes.AppID));
                }
                if (httpInvokes.CanRetry && httpInvokes.RetryTimes > 0)
                {
                    for (int i = 0; i < httpInvokes.RetryTimes; i++)
                    {
                        Console.WriteLine("重试{0}次", i + 1);
                        ret = HttpHelper.PostRequest(_3rdHttp + "Http/CHttpRequests", postdata, dic, _timeout);
                        if (ret.IsSuccess)
                        {
                            break;
                        }
                    }
                }
            }
            return(new Result()
            {
                Data = ret.d,
                IsSuccess = ret.IsSuccess,
                Wrong = ret.GetWrong(),
                HttpCode = ret.code,
            });
        }