/// <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); }