internal static Uri ComposeUrl(IRequest iRequest) { Uri url = iRequest.Endpoint; var resourcePath = iRequest.ResourcePath; if (resourcePath == null) { resourcePath = string.Empty; } else { if (resourcePath.StartsWith("//", StringComparison.Ordinal)) { resourcePath = resourcePath.Substring(2); } else if (resourcePath.StartsWith("/", StringComparison.Ordinal)) { resourcePath = resourcePath.Substring(1); } } var delim = "?"; var sb = new StringBuilder(); if (iRequest.SubResources.Count > 0) { foreach (var subResource in iRequest.SubResources) { sb.AppendFormat("{0}{1}", delim, subResource.Key); if (subResource.Value != null) { sb.AppendFormat("={0}", subResource.Value); } delim = "&"; } } if (iRequest.Parameters.Count > 0) { var queryString = AliyunSDKUtils.GetParametersAsString(iRequest.Parameters); sb.AppendFormat("{0}{1}", delim, queryString); } var parameterizedPath = string.Concat(resourcePath, sb); var uri = new Uri(url.AbsoluteUri + parameterizedPath); return(uri); }
/// <summary> /// Creates the HttpWebRequest and configures the end point, content, user agent and proxy settings. /// </summary> /// <param name="requestContext">The async request.</param> /// <returns>The web request that actually makes the call.</returns> protected virtual IHttpRequest <TRequestContent> CreateWebRequest(IRequestContext requestContext) { IRequest request = requestContext.Request; Uri url = AliyunServiceClient.ComposeUrl(request); var httpRequest = _requestFactory.CreateHttpRequest(url); httpRequest.ConfigureRequest(requestContext); httpRequest.Method = request.HttpMethod; if (request.MayContainRequestBody()) { if (request.Content == null && (request.ContentStream == null)) { string queryString = AliyunSDKUtils.GetParametersAsString(request.Parameters); request.Content = Encoding.UTF8.GetBytes(queryString); } if (request.Content != null) { request.Headers[HttpHeader.ContentLengthHeader] = request.Content.Length.ToString(CultureInfo.InvariantCulture); } else if (request.ContentStream != null && !request.Headers.ContainsKey(HttpHeader.ContentLengthHeader)) { request.Headers[HttpHeader.ContentLengthHeader] = request.ContentStream.Length.ToString(CultureInfo.InvariantCulture); } } else if (request.UseQueryString && (request.HttpMethod == "POST" || request.HttpMethod == "PUT" || request.HttpMethod == "DELETE")) { request.Content = new Byte[0]; } return(httpRequest); }