/// <summary> /// Performs a DELETE request and returns the response body and its status code. /// </summary> /// <param name="url">The target URL.</param> /// <param name="expectedStatusCodes">The expected status codes. All other status codes trigger an exception.</param> /// <exception cref="MoodleLtiException">Thrown when an unexpected HTTP status code is returned.</exception> private async Task <(string responseBody, HttpStatusCode statusCode)> DoDeleteRequestAsync(string url, HttpStatusCode[] expectedStatusCodes) { // Sign request object var reqMessage = new HttpRequestMessage(HttpMethod.Delete, url) { Content = new StringContent(string.Empty) }; await SecuredClient.SignRequest(_httpClient, reqMessage, _consumerKey, _sharedSecret, SignatureMethod.HmacSha1); // Send HTTP request and retrieve response using var response = await _httpClient.SendAsync(reqMessage); string responseBody = await response.ReadBody(); if (expectedStatusCodes.Contains(response.StatusCode)) { return(responseBody, response.StatusCode); } // An error occured throw CreateExceptionFromFailedRequest( response.StatusCode, expectedStatusCodes, response.RequestMessage.Headers.ToString(), string.Empty, response.Headers.ToString(), responseBody ); }
/// <summary> /// Performs a GET request and returns the response body and its status code. /// </summary> /// <param name="url">The target URL.</param> /// <param name="expectedContentType">The expected response content type.</param> /// <param name="expectedStatusCodes">The expected status codes. All other status codes trigger an exception.</param> /// <exception cref="MoodleLtiException">Thrown when an unexpected HTTP status code is returned.</exception> private async Task <(string responseBody, HttpStatusCode statusCode)> DoGetRequestAsync(string url, string expectedContentType, HttpStatusCode[] expectedStatusCodes) { // Assign content type _httpClient.DefaultRequestHeaders.Accept.Clear(); _httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(expectedContentType)); // Sign request object var reqMessage = new HttpRequestMessage(HttpMethod.Get, url) { Content = new StringContent(string.Empty) }; await SecuredClient.SignRequest(_httpClient, reqMessage, _consumerKey, _sharedSecret, SignatureMethod.HmacSha1); // Send HTTP request and retrieve response using var response = await _httpClient.SendAsync(reqMessage); string responseBody = await response.ReadBody(); if (expectedStatusCodes.Contains(response.StatusCode)) { return(responseBody, response.StatusCode); } // An error occured throw CreateExceptionFromFailedRequest( response.StatusCode, expectedStatusCodes, response.RequestMessage.Headers.ToString(), string.Empty, response.Headers.ToString(), responseBody ); }
public async System.Threading.Tasks.Task HeaderContainsSHA256_IfSignatureMethodParamSetToSHA256() { //arrange var httpClient = new HttpClient(); //act await SecuredClient.SignRequest(httpClient, new HttpMethod("GET"), "https://www.test.com/membership", new StringContent("", System.Text.Encoding.UTF8), "TestConsumerKey", "TestConsumerSecret", SignatureMethod.HmacSha256); //assert Assert.NotNull(httpClient); Assert.NotNull(httpClient.DefaultRequestHeaders); Assert.NotNull(httpClient.DefaultRequestHeaders.Authorization); var headervalues = httpClient.DefaultRequestHeaders.Authorization.Parameter; var headerValuesList = headervalues.Split(','); Assert.True(headervalues.Contains("oauth_signature_method=\"HMAC-SHA256\"")); }