Пример #1
0
        /// <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
                      );
        }
Пример #2
0
        /// <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
                      );
        }
Пример #3
0
        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\""));
        }