/// <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); }
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)); }