public virtual async Task <IRestApiResult <TResult> > PostAsync <TContent, TResult>(
            Priority priority,
            string path,
            TContent content = default(TContent),
            ProgressDelegate progressDelegate = null,
            IList <KeyValuePair <string, string> > headers = null,
            IHttpContentResolver httpContentResolver       = null,
            IHttpResponseResolver httpResponseResolver     = null,
            CancellationToken cancellationToken            = default(CancellationToken))
        {
            var httpContent = ResolveHttpContent(content);
            var stream      = await httpContent.ReadAsStreamAsync();

            var progressContent = new ProgressStreamContent(httpContent.Headers, stream, cancellationToken)
            {
                Progress = progressDelegate
            };

            var httpRequestMessage = new HttpRequestMessage(new HttpMethod("POST"), path)
            {
                Content = progressContent
            };

            return(await SendAsync <TResult>(priority, httpRequestMessage, headers, httpResponseResolver, cancellationToken));
        }
Пример #2
0
        public virtual async Task <IRestApiResult <TResult> > GetAsync <TResult>(
            Priority priority,
            string path,
            IList <KeyValuePair <string, string> > headers = null,
            IHttpResponseResolver httpResponseResolver     = null,
            CancellationToken cancellationToken            = default(CancellationToken))
        {
            var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, path);

            return(await SendAsync <TResult>(priority, httpRequestMessage, headers, httpResponseResolver, cancellationToken)
                   .ConfigureAwait(false));
        }
 public static Task <IRestApiResult <TResult> > GetAsync <TResult>(this IRestApiClient apiClient, Priority priority,
                                                                   string path,
                                                                   int retryCount,
                                                                   Func <int, TimeSpan> sleepDurationProvider,
                                                                   IList <KeyValuePair <string, string> > headers = null,
                                                                   IHttpResponseResolver httpResponseResolver     = null,
                                                                   CancellationToken cancellationToken            = default(CancellationToken))
 {
     return(PollyDecorator(
                () => apiClient.GetAsync <TResult>(priority, path, headers, httpResponseResolver, cancellationToken),
                retryCount,
                sleepDurationProvider));
 }
 public static Task <IRestApiResult <TResult> > PutAsync <TContent, TResult>(this IRestApiClient apiClient,
                                                                             Priority priority,
                                                                             string path,
                                                                             int retryCount,
                                                                             int sleepDuration,
                                                                             TContent content = default(TContent),
                                                                             IList <KeyValuePair <string, string> > headers = null,
                                                                             IHttpContentResolver httpContentResolver       = null,
                                                                             IHttpResponseResolver httpResponseResolver     = null,
                                                                             CancellationToken cancellationToken            = default(CancellationToken))
 {
     return(PollyDecorator(
                () => apiClient.PutAsync <TContent, TResult>(priority, path, content, headers, httpContentResolver, httpResponseResolver, cancellationToken),
                retryCount,
                sleepDuration));
 }
Пример #5
0
        public virtual async Task <IRestApiResult <TResult> > PatchAsync <TContent, TResult>(
            Priority priority,
            string path,
            TContent content = default(TContent),
            IList <KeyValuePair <string, string> > headers = null,
            IHttpContentResolver httpContentResolver       = null,
            IHttpResponseResolver httpResponseResolver     = null,
            CancellationToken cancellationToken            = default(CancellationToken))
        {
            var httpContent        = ResolveHttpContent(content, httpContentResolver);
            var httpRequestMessage = new HttpRequestMessage(new HttpMethod("PATCH"), path)
            {
                Content = httpContent
            };

            return(await SendAsync <TResult>(priority, httpRequestMessage, headers, httpResponseResolver, cancellationToken)
                   .ConfigureAwait(false));
        }
Пример #6
0
        protected virtual async Task <IRestApiResult <TResult> > SendAsync <TResult>(
            Priority priority,
            HttpRequestMessage httpRequestMessage,
            IList <KeyValuePair <string, string> > headers,
            IHttpResponseResolver httpResponseResolver,
            CancellationToken cancellationToken)
        {
            var httpClient = GetRestApiClient(priority);

            SetHttpRequestHeaders(httpRequestMessage, headers);

            var response = await httpClient
                           .SendAsync(httpRequestMessage, cancellationToken)
                           .ConfigureAwait(false);

            if (httpResponseResolver == null)
            {
                httpResponseResolver = _restApiClientOptions.DefaultResponseResolver;
            }

            return(await response
                   .BuildRestApiResult <TResult>(httpResponseResolver)
                   .ConfigureAwait(false));
        }
Пример #7
0
 public RestApiClientBuilder SetHttpResponseResolver(IHttpResponseResolver responseResolver)
 {
     _responseResolver = responseResolver;
     return(this);
 }
Пример #8
0
        public static async Task <IRestApiResult <TResult> > BuildRestApiResult <TResult>(this HttpResponseMessage response,
                                                                                          IHttpResponseResolver resolver)
        {
            if (response.IsSuccessStatusCode)
            {
                var result = await resolver.ResolveHttpResponseAsync <TResult>(response);

                return(new RestApiResult <TResult>(response.StatusCode, result, response.ReasonPhrase));
            }

            var errorMessage = string.Empty;

            if (response.Content != null)
            {
                errorMessage = await response.Content.ReadAsStringAsync();
            }

            return(new RestApiResult <TResult>(response.StatusCode, default(TResult), response.ReasonPhrase,
                                               errorMessage));
        }