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