Esempio n. 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="url"></param>
        /// <param name="param"></param>
        /// <returns></returns>
        public virtual string callRestful(string url, IDictionary <string, object> param)
        {
            url = BaseAddress + url;
            var sign = generateSign(GET, url, param);

            if (string.IsNullOrEmpty(sign))
            {
                return("generate sign error");
            }
            param.Add(nameof(sign), sign);
            var stringBuilder = new StringBuilder();

            stringBuilder.Append(url);
            stringBuilder.Append("?");
            var i = 0;

            foreach (var kvp in param)
            {
                stringBuilder.Append(kvp.Key);
                stringBuilder.Append("=");
                stringBuilder.Append(TFMs_Compat.UrlEncode(kvp.Value.ToString()));
                if (i++ != param.Count - 1)
                {
                    stringBuilder.Append("&");
                }
            }
            url = stringBuilder.ToString();
            return(Send(url, JSON_MIME, GET, 20000));
        }
Esempio n. 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="method"></param>
        /// <param name="url"></param>
        /// <param name="param"></param>
        /// <returns></returns>
        public string generateSign(string method, string url, IDictionary <string, object> param)
        {
            var paramStr = param.OrderBy(x => x.Key)
                           .Aggregate <KeyValuePair <string, object>, string>
                               (null, (current, kvp) => current + kvp.Key + "=" + kvp.Value);
            var u      = new Uri(url);
            var md5Str = method + u.Host + u.AbsolutePath + paramStr + m_secret_key;

            md5Str = TFMs_Compat.UrlDecode(md5Str);
            return(ComputeMD5(md5Str));
        }
Esempio n. 3
0
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="createErrorResult"></param>
        /// <param name="requestUri"></param>
        /// <param name="args0"></param>
        /// <param name="args1"></param>
        /// <returns></returns>
        protected async Task <TResult> SendAsync <TResult>(
            Func <string, TResult> createErrorResult,
            string requestUri,
            IToDictionary args0 = null,
            IEnumerable <KeyValuePair <string, object> > args1 = null) where TResult : new()
        {
            var is_iOS_msg = false;
            IDictionary <string, object> args = null;

            #region args0

            var args0_ = args0.ToDictionary();
            if (args0_ != null)
            {
                args = args0_;
            }
            else
            {
                if (args0 is MessageBase.IPlatform message)
                {
                    if (!IsValidMessageType(message))
                    {
                        return(createErrorResult(Constants.ErrorMessageType));
                    }
                    is_iOS_msg = message.Platform == Platform.iOS;
                }

                if (args0 is IsValid @is && [email protected]())
                {
                    return(createErrorResult(Constants.ErrorMessageInvalid));
                }
            }

            #endregion

            #region args1

            if (args1 != null)
            {
                if (args == null)
                {
                    if (args1 is IDictionary <string, object> args1_)
                    {
                        args = args1_;
                    }
                    else
                    {
                        args = args1.ToDictionary(k => k.Key, v => v.Value);
                    }
                }
                else
                {
                    foreach (var arg in args1)
                    {
                        args.Add(arg.Key, arg.Value);
                    }
                }
            }

            #endregion

            args = TryInitParams(args);

            if (is_iOS_msg && !args.ContainsKey(Constants.environment))
            {
                args.Add(Constants.environment, iOSEnvironment);
            }

            IDictionary <string, string> postArgs = null;
            StringBuilder requestUriStringBuilder = null;
            StringBuilder signStringBuilder;

            if (HttpMethod == HttpMethod.Get)
            {
                requestUriStringBuilder = new StringBuilder();
                signStringBuilder       = new StringBuilder(Constants.GET);
            }
            else if (HttpMethod == HttpMethod.Post)
            {
                postArgs          = new Dictionary <string, string>();
                signStringBuilder = new StringBuilder(Constants.POST);
            }
            else
            {
                throw new ArgumentOutOfRangeException(nameof(HttpMethod));
            }

            if (requestUri.IsHttpUrl())
            {
                var u = new Uri(requestUri);
                requestUriStringBuilder?.Append(requestUri);
                signStringBuilder.Append(u.Host);
                signStringBuilder.Append(u.AbsolutePath);
            }
            else
            {
                var baseAddress = client.BaseAddress;
                if (baseAddress == null)
                {
                    requestUri = Constants.BaseAddress_HTTPS + requestUri;
                    requestUriStringBuilder.Append(Constants.BaseAddress_HTTPS);
                    signStringBuilder.Append(Constants.Host);
                }
                else
                {
                    requestUri = baseAddress.ToString() + requestUri;
                    requestUriStringBuilder.Append(requestUri);
                    signStringBuilder.Append(baseAddress.Host);
                }
                signStringBuilder.Append(requestUri);
            }

            foreach (var arg in args.OrderBy(arg => arg.Key))
            {
                signStringBuilder.Append(arg.Key);
                signStringBuilder.Append(Constants.equal);
                var value = arg.Value == null ? string.Empty :
                            (arg.Value is JArray jArray ?
                             jArray.ToString(Formatting.None) : arg.Value.ToString());
                signStringBuilder.Append(value);

                if (postArgs != null)
                {
                    postArgs.Add(arg.Key, value);
                }

                if (requestUriStringBuilder != null)
                {
                    requestUriStringBuilder.Append(arg.Key);
                    requestUriStringBuilder.Append(Constants.equal);
                    value = TFMs_Compat.UrlEncode(value);
                    requestUriStringBuilder.Append(value);
                }
            }

            signStringBuilder.Append(m_secret_key);

            var signString = signStringBuilder.ToString();
            signString = ComputeMD5(signString);

            if (requestUriStringBuilder != null)
            {
                requestUriStringBuilder.Append(Constants.sign);
                requestUriStringBuilder.Append(Constants.equal);
                requestUriStringBuilder.Append(signString);

                requestUri = requestUriStringBuilder.ToString();
            }

            if (HttpMethod == HttpMethod.Post)
            {
                args.Add(Constants.sign, signString);
            }

            string @string;

            if (HttpMethod == HttpMethod.Get)
            {
                @string = await GetStringAsync(requestUri);
            }
            else if (HttpMethod == HttpMethod.Post)
            {
                @string = await PostStringAsync(requestUri, postArgs);
            }
            else
            {
                throw new ArgumentOutOfRangeException(nameof(HttpMethod));
            }

            return(@string.Deserialize <TResult>());
        }
Esempio n. 4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="magics"></param>
 public static void InitHttpClientCompatCustomMagic([NotNull] IEnumerable <Func <Dictionary <string, Action> > > magics)
 => TFMs_Compat.InitHttpClientCompatCustomMagic(magics);
Esempio n. 5
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="magics"></param>
 public static void InitHttpClientCompatCustomMagic(params Func <Dictionary <string, Action> >[] magics)
 => TFMs_Compat.InitHttpClientCompatCustomMagic(magics);
Esempio n. 6
0
#pragma warning restore IDE1006 // 命名样式

        #region CompatMagic

        /// <summary>
        ///
        /// </summary>
        public static void InitHttpClientCompatDefaultMagic()
        => TFMs_Compat.InitHttpClientCompatDefaultMagic();