public async Task <T> InvokeAsync <T>(HttpMethod httpMethod, UriDynamicPart uriDynamicPart, HttpMethodContext context, CancellationToken cancellationToken) { var response = await SendRequestAsync(httpMethod, uriDynamicPart, context, cancellationToken); var hasContent = response.Content.Headers.ContentLength > 0 && !(typeof(T) == typeof(object)); if (hasContent) { return(await response.Content .ReadAsAsync <T>(new[] { context.ResponseFormatter }, cancellationToken) .ContinueWith(t => { response.Dispose(); return t.Result; }, cancellationToken) .ConfigureAwait(false)); } else { return(await Task .FromResult(default(T)) .ContinueWith(t => { response.Dispose(); return default(T); }, cancellationToken)); } }
private async Task <HttpResponseMessage> SendRequestAsync(HttpMethod method, UriDynamicPart uriDynamicPart, HttpMethodContext context, CancellationToken cancellationToken) { using (var request = new HttpRequestMessage(method, CreateAbsoluteUri(uriDynamicPart))) { if (!(context.Body is null)) { request.Content = new ObjectContent(context.Body.GetType(), context.Body, context.RequestFormatter); } _defaultHttpRequestHeadersConfiguration.Apply(request.Headers); context.HttpRequestHeadersConfiguration.Apply(request.Headers); var response = await _client.SendAsync(request, cancellationToken); if (context.EnsureSuccessStatusCode) { response.EnsureSuccessStatusCode(); } return(response); } }
public static Task <T> GetAsync <T>(this IRestClient client, [NotNull] UriDynamicPart uriDynamicPart, [CanBeNull] HttpMethodContext context, CancellationToken cancellationToken) { return(client.InvokeAsync <T>(HttpMethod.Get, uriDynamicPart, context, cancellationToken)); }