Exemple #1
0
        private async Task <ReloadlyException> CreateResponseException <TResponse>(
            ReloadlyRequest <TResponse> request, HttpResponseMessage responseMessage)
            where TResponse : class
        {
            if ((int)responseMessage.StatusCode == STATUS_CODE_TOO_MANY_REQUEST)
            {
                return(CreateRateLimitException <TResponse>(responseMessage));
            }

            var body = responseMessage.Content != null
                ? await responseMessage.Content.ReadAsStringAsync()
                : null;

            if (string.IsNullOrWhiteSpace(body))
            {
                throw new ApiException(
                          "No response from server, please try again or contact support",
                          (int)responseMessage.StatusCode, responseMessage.RequestMessage.RequestUri.AbsolutePath);
            }

            if (responseMessage.RequestMessage.RequestUri.AbsolutePath.TrimStart('/') == "oauth/token")
            {
                throw new ReloadlyOAuthException <TResponse>(
                          request, body, (int)responseMessage.StatusCode, responseMessage.RequestMessage.RequestUri.AbsolutePath);
            }

            throw new ApiException(body, (int)responseMessage.StatusCode, responseMessage.RequestMessage.RequestUri.AbsolutePath);
        }
Exemple #2
0
 public Task <TResponse> RefreshTokenForRequest <TResponse>(ReloadlyRequest <TResponse> request, string accessToken)
     where TResponse : class
 {
     AccessToken = accessToken;
     request.SetHeader(HeaderNames.Authorization, $"Bearer {accessToken}");
     return(_httpClient.SendAsync(request));
 }
Exemple #3
0
        public async Task <TResponse?> SendAsync <TResponse>(ReloadlyRequest <TResponse> request)
            where TResponse : class
        {
            var reqMessage = request.CreateHttpRequestMessage();

            if (!_disableTelemetry)
            {
                var telemetry = TelemetryUtility.Create(_apiVersion).HttpHeaderValue();
                reqMessage.Headers.TryAddWithoutValidation(TelemetryHeaderName, telemetry);
            }

            var httpClient = _httpClientFactory.CreateClient();
            var resMessage = await httpClient.SendAsync(reqMessage);

            return(await ParseResponse(request, resMessage));
        }
Exemple #4
0
        private async Task <TResponse?> ParseResponse <TResponse>(ReloadlyRequest <TResponse> request, HttpResponseMessage responseMessage)
            where TResponse : class
        {
            if (!responseMessage.IsSuccessStatusCode)
            {
                throw await CreateResponseException(request, responseMessage);
            }

            var payload = await responseMessage.Content.ReadAsStringAsync();

            try
            {
                return(JsonConvert.DeserializeObject <TResponse>(payload));
            }
            catch (System.Exception ex)
            {
                var path = responseMessage.RequestMessage.RequestUri.AbsolutePath;
                throw new ApiException("Failed to parse json body.", (int)responseMessage.StatusCode, path, ex);
            }
        }
        public async Task OfTShouldCreateHttpRequestMessage()
        {
            // arrange
            var url             = ServiceUrls.ByEnvironment(Enums.ReloadlyEnvironment.Live);
            var reloadlyRequest =
                new ReloadlyRequest <object>(HttpMethod.Get, new Uri(url))
                .SetHeader("Accept", "application/json")
                .SetBody(new { name = "bodyValue" })
                .SetQueryParameter("param", "queryValue");

            // act
            var request = reloadlyRequest.CreateHttpRequestMessage();

            // assert
            Assert.AreEqual(new Uri(url).Host, request.RequestUri.Host);

            var requestBody = await request.Content.ReadAsStringAsync();

            Assert.IsTrue(requestBody.Contains("\"name\":\"bodyValue\""));

            Assert.AreEqual("?param=queryValue", request.RequestUri.Query);
        }
 public ReloadlyOAuthException()
 {
     Request = default !;