string CanonicalHeaders(WebTestRequestHeaderCollection headers) { return(String.Join("", headers .Where(header => header.Name.StartsWith("x-ms")) .Select(header => Tuple.Create(header.Name.ToLower(), header.Value)) .OrderBy(header => header.Item1) .Select(header => String.Format("{0}:{1}\n", header.Item1, header.Item2)))); }
/// <summary> /// Gets the request header. /// </summary> /// <param name="headers">The headers.</param> /// <returns></returns> private static string GetRequestHeader(WebTestRequestHeaderCollection headers) { string requestHeader = string.Empty; for (int i = 0; i < headers.Count; i++) { requestHeader = requestHeader + headers[i].Name + ": " + headers[i].Value + "\n"; } return(requestHeader); }
string CanonicalHeaders(WebTestRequestHeaderCollection headers) { return String.Join("", headers .Where(header => header.Name.StartsWith("x-ms")) .Select(header => Tuple.Create(header.Name.ToLower(), header.Value)) .OrderBy(header => header.Item1) .Select(header => String.Format("{0}:{1}\n", header.Item1, header.Item2))); }
string GetAuthSignature(string verb, string contentType, string requestDate, string uriPath, WebTestRequestHeaderCollection headers) { string stringToSign = String.Format("{0}\n\n{1}\n{2}\n{3}{4}", verb, contentType, requestDate, CanonicalHeaders(headers), CanonicalResource(uriPath)); var bytesToSign = Encoding.UTF8.GetBytes(stringToSign); using (var hmac = new HMACSHA256(Convert.FromBase64String((string)this.Context["AccountKey"]))) { return Convert.ToBase64String(hmac.ComputeHash(bytesToSign)); } }
string GetAuthSignature(string verb, string contentType, string requestDate, string uriPath, WebTestRequestHeaderCollection headers) { string stringToSign = String.Format("{0}\n\n{1}\n{2}\n{3}{4}", verb, contentType, requestDate, CanonicalHeaders(headers), CanonicalResource(uriPath)); var bytesToSign = Encoding.UTF8.GetBytes(stringToSign); using (var hmac = new HMACSHA256(Convert.FromBase64String((string)this.Context["AccountKey"]))) { return(Convert.ToBase64String(hmac.ComputeHash(bytesToSign))); } }
/// <summary> /// Gets the test results. /// </summary> /// <param name="method">The method.</param> /// <param name="urlWithQueryString">The URL with query string.</param> /// <param name="requestHttpVersion">The request HTTP version.</param> /// <param name="requestHeaders">The request headers.</param> /// <param name="requestBody">The request body.</param> /// <param name="response">The response.</param> /// <returns></returns> public static string GetTestResults(string method, string urlWithQueryString, string requestHttpVersion, WebTestRequestHeaderCollection requestHeaders, StringHttpBody requestBody, WebTestResponse response) { string methodAndUrlWithQueryString = method + " " + urlWithQueryString + " " + "HTTP/" + requestHttpVersion; string reqHeaders = GetRequestHeader(requestHeaders); string reqBody = GetRequestStringBody(requestBody); string respHeaders = GetResponseHeader(response); string respBody = GetResponseStringBody(response); string finalResult = ">>> REQUEST <<<\n" + methodAndUrlWithQueryString + "\n" + reqHeaders + "\n" + reqBody + "\n\n>>> RESPONSE <<<\n" + respHeaders + "\n" + respBody; return(finalResult); }