/// <summary>Sends a request to Rebrandly's API as an asynchronous operation.</summary>
        /// <param name="request">The parameters of the request to send.</param>
        /// <param name="cancellationToken">The cancellation token to cancel operation.</param>
        /// <returns>The task object representing the asynchronous operation.</returns>
        public async Task <RebrandlyResponse> MakeRequestAsync(RebrandlyRequest request, CancellationToken cancellationToken = default)
        {
            Exception           requestException = null;
            HttpResponseMessage response         = null;

            requestException = null;

            var httpRequest = BuildRequestMessage(request);

            try
            {
                response = await httpClient.SendAsync(httpRequest, cancellationToken)
                           .ConfigureAwait(false);
            }
            catch (HttpRequestException exception)
            {
                requestException = exception;
            }
            catch (OperationCanceledException exception)
                when(!cancellationToken.IsCancellationRequested)
                {
                    requestException = exception;
                }

            if (requestException != null)
            {
                throw requestException;
            }

            string contentResponse = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

            return(new RebrandlyResponse(response.StatusCode, response.Headers, contentResponse));
        }
        private HttpRequestMessage BuildRequestMessage(RebrandlyRequest request)
        {
            var requestMessage = new HttpRequestMessage(request.Method, request.Uri);

            // Standard headers
            requestMessage.Headers.Add(request.AuthorizationHeader.Scheme, request.AuthorizationHeader.Parameter);

            // Request body
            requestMessage.Content = request.Content;

            return(requestMessage);
        }
예제 #3
0
        public async Task <T> RequestAsync <T>(
            HttpMethod method,
            string path,
            BaseOptions options,
            RequestOptions requestOptions,
            CancellationToken cancellationToken = default) where T : IRebrandlyEntity
        {
            var request  = new RebrandlyRequest(this, method, path, options, requestOptions);
            var response = await HttpClient.MakeRequestAsync(request, cancellationToken).ConfigureAwait(false);

            return(ProcessResponse <T>(response));
        }