/// <summary>
        /// 获取参数对应的值信息
        /// </summary>
        /// <param name="propertyName">参数名称</param>
        /// <param name="request">请求参数封装类</param>
        /// <returns>请求参数的值</returns>
        private string GetRequestValue(string propertyName, JdcloudRequest request)
        {
            PropertyInfo propertyInfo = null;
            var          properties   = request.GetType().GetProperties();

            if (properties != null && properties.Length > 0)
            {
                propertyInfo = properties.Where(p => p.Name.ToLower() == propertyName.ToLower()).FirstOrDefault();
            }

            if (propertyInfo == null)
            {
                throw new Exception($"can not get the propertyInfo of {propertyName},please check.");
            }
#if NET40 || NET35
            object value = propertyInfo.GetValue(request, null);
#else
            object value = propertyInfo.GetValue(request);
#endif
            if (value == null)
            {
                throw new Exception($"field {propertyName} not set.");
            }

            return(value.ToString());
        }
        /// <summary>
        /// 获取请求的Http body 的内容
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求body 内容</returns>
        private string GetContent(JdcloudRequest request)
        {
            if (request == null)
            {
                return(string.Empty);
            }

            string method = Method;

            if (SdkHttpMethod.DELETE.ToString().ToLower() == method.ToLower() ||
                SdkHttpMethod.GET.ToString().ToLower() == method.ToLower() ||
                SdkHttpMethod.HEAD.ToString().ToLower() == method.ToLower())
            {
                return(null);
            }
            string contentStr = JsonUtil.ObjectToJson(request);

#if NET35
            if (!string.IsNullOrEmpty(contentStr) && !string.IsNullOrEmpty(contentStr.Trim()))
#else
            if (!string.IsNullOrWhiteSpace(contentStr))
#endif
            {
                contentStr = contentStr.Replace(System.Environment.NewLine, "");
            }
            return(contentStr);
        }
        /// <summary>
        /// 请求url 参数格式化替换
        /// </summary>
        /// <param name="httpUrl">要替换的url</param>
        /// <param name="request">请求的参数信息</param>
        /// <returns>替换后的url 信息</returns>
        public string ReplaceUrl(string httpUrl, JdcloudRequest request)
        {
#if NET35
            if (string.IsNullOrEmpty(httpUrl) || string.IsNullOrEmpty(httpUrl.Trim()))
#else
            if (string.IsNullOrWhiteSpace(httpUrl))
#endif
            {
                return(string.Empty);
            }
            if (httpUrl.IndexOf("{") < 0)
            {
                return(httpUrl);
            }
            var matchs = Regex.Matches(httpUrl, pattern);
            if (matchs != null && matchs.Count > 0)
            {
                int i = 1;
                foreach (Match item in matchs)
                {
                    i++;

                    string fieldName  = item.Groups[1].Value;
                    var    paramValue = GetRequestValue(fieldName, request);

                    if (!string.IsNullOrEmpty(paramValue))
                    {
                        paramValue = Uri.EscapeUriString(paramValue);
                    }
                    httpUrl = httpUrl.Replace(item.Value, paramValue);
                }
            }
            return(httpUrl);
        }
        /// <summary>
        /// 获取 url 连接串参数
        /// </summary>
        /// <param name="request">请求参数信息</param>
        /// <returns>请求 quary param string </returns>
        private string GetParams(JdcloudRequest request)
        {
            if (request == null)
            {
                return(string.Empty);
            }

            string method = Method;

            if (SdkHttpMethod.DELETE.ToString().ToLower() == method.ToLower() ||
                SdkHttpMethod.GET.ToString().ToLower() == method.ToLower() ||
                SdkHttpMethod.HEAD.ToString().ToLower() == method.ToLower())
            {
                JsonSerializer jsonSerializer = new JsonSerializer();
                //json 格式化,转换为小驼峰的形式
                jsonSerializer.ContractResolver = new CamelCasePropertyNamesContractResolver();
                JObject jObject = JObject.FromObject(request, jsonSerializer);
                Dictionary <string, string> paramDic = new Dictionary <string, string>();
                string paramsStr = "";
                paramDic = CreateParam(jObject);
                if (paramDic != null)
                {
                    var           paramDicOrder   = paramDic.OrderBy(p => p.Key);
                    StringBuilder paramStrBuilder = new StringBuilder();
                    foreach (var item in paramDicOrder)
                    {
                        string value = item.Value; // System.Web.HttpUtility.UrlEncode(item.Value, Encoding.GetEncoding(charset));
                        Regex  reg   = new Regex(@"%[a-f0-9]{2}");
                        value = reg.Replace(value, m => m.Value.ToUpperInvariant());
                        paramStrBuilder.Append("&").Append(item.Key).Append("=").Append(value);
                    }
                    paramsStr = paramStrBuilder.ToString();
                }
#if NET35
                if (!string.IsNullOrEmpty(paramsStr) && !string.IsNullOrEmpty(paramsStr.Trim()))
#else
                if (!string.IsNullOrWhiteSpace(paramsStr))
#endif
                {
                    return("?" + paramsStr.Substring(1));
                }
                else
                {
                    return(string.Empty);
                }
            }
            return(string.Empty);
        }