public static string ComposeUrl(string endpoint, Dictionary <string, string> queries, string protocol) { Dictionary <string, string> mapQueries = queries; StringBuilder urlBuilder = new StringBuilder(""); urlBuilder.Append(protocol); urlBuilder.Append("://").Append(endpoint); urlBuilder.Append("/?"); StringBuilder builder = new StringBuilder(""); foreach (var entry in mapQueries) { String key = entry.Key; String val = entry.Value; if (val == null) { continue; } builder.Append(AcsURLEncoder.Encode(key)); builder.Append("=").Append(AcsURLEncoder.Encode(val)); builder.Append("&"); } int strIndex = builder.Length; builder.Remove(strIndex - 1, 1); string query = builder.ToString(); return(urlBuilder.Append(query).ToString()); }
public static string ComposeStringToSign(MethodType method, Dictionary <string, string> queries) { IDictionary <string, string> sortedDictionary = new SortedDictionary <string, string>(queries, StringComparer.Ordinal); var canonicalizedQueryString = new StringBuilder(); foreach (var p in sortedDictionary) { canonicalizedQueryString.Append("&") .Append(AcsURLEncoder.PercentEncode(p.Key)).Append("=") .Append(AcsURLEncoder.PercentEncode(p.Value)); } var stringToSign = new StringBuilder(); stringToSign.Append(method.ToString()); stringToSign.Append(Separator); stringToSign.Append(AcsURLEncoder.PercentEncode("/")); stringToSign.Append(Separator); stringToSign.Append(AcsURLEncoder.PercentEncode( canonicalizedQueryString.ToString().Substring(1))); return(stringToSign.ToString()); }