示例#1
0
        protected virtual HttpContent ResolveHttpContent <TContent>(
            TContent content,
            IHttpContentResolver httpContentResolver = null)
        {
            HttpContent httpContent = null;

            if (!EqualityComparer <TContent> .Default.Equals(content, default(TContent)))
            {
                if (content is HttpContent)
                {
                    httpContent = content as HttpContent;
                }
                else
                {
                    if (httpContentResolver != null)
                    {
                        httpContent = httpContentResolver.ResolveHttpContent(content);
                    }
                    else
                    {
                        var contentAsDictionary = content as Dictionary <string, string>;

                        httpContent = contentAsDictionary != null
                            ? new DictionaryContentResolver().ResolveHttpContent(content as Dictionary <string, string>)
                            : _restApiClientOptions.DefaultContentResolver.ResolveHttpContent(content);
                    }
                }
            }

            return(httpContent);
        }
        internal HttpContent ResolveHttpContent <TContent>(TContent content, IHttpContentResolver contentResolver = null)
        {
            HttpContent httpContent = null;

            if (content != null)
            {
                if (content is HttpContent)
                {
                    httpContent = content as HttpContent;
                }
                else
                {
                    if (contentResolver != null)
                    {
                        httpContent = contentResolver.ResolveHttpContent(content);
                    }
                    else
                    {
                        var contentAsDictionary = content as Dictionary <string, string>;

                        httpContent = contentAsDictionary != null
                            ? new DictionaryContentResolver().ResolveHttpContent(content as Dictionary <string, string>)
                            : HttpContentResolver.ResolveHttpContent(content);
                    }
                }
            }
            return(httpContent);
        }
        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));
        }
 public static Task <IRestApiResult <TResult> > PutAsync <TContent, TResult>(this IRestApiClient apiClient,
                                                                             Priority priority, string path, int retryCount, int sleepDuration, TContent content = default(TContent),
                                                                             IHttpContentResolver contentResolver = null,
                                                                             CancellationToken cancellationToken  = default(CancellationToken))
 {
     return(PollyDecorator(
                () => apiClient.PutAsync <TContent, TResult>(priority, path, cancellationToken: cancellationToken),
                retryCount,
                sleepDuration));
 }
 public static Task <IRestApiResult <TResult> > PutAsync <TContent, TResult>(this IRestApiClient apiClient,
                                                                             Priority priority,
                                                                             string path,
                                                                             int retryCount,
                                                                             Func <int, TimeSpan> sleepDurationProvider,
                                                                             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,
                sleepDurationProvider));
 }
示例#6
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));
        }
示例#7
0
 public RestApiClientBuilder SetHttpContentResolver(IHttpContentResolver contentResolver)
 {
     _contentResolver = contentResolver;
     return(this);
 }
示例#8
0
        public static async Task <TResult> PostAsync <TContent, TResult>(this WebApiClient webApiClient,
                                                                         Priority priority, string path, TContent content = default(TContent),
                                                                         ProgressDelegate progressDelegate = null, IHttpContentResolver contentResolver = null)
        {
            var httpClient = webApiClient.GetWebApiClient(priority);

            webApiClient.SetHttpRequestHeaders(httpClient);

            var httpContent = webApiClient.ResolveHttpContent(content);

            var stream = await httpContent.ReadAsStreamAsync();

            var progressContent = new ProgressStreamContent(httpContent.Headers, stream, CancellationToken.None);

            progressContent.Progress = progressDelegate;

            var response = await httpClient
                           .PostAsync(path, progressContent)
                           .ConfigureAwait(false);

            if (!await response.EnsureSuccessStatusCodeAsync())
            {
                return(default(TResult));
            }

            return(await webApiClient.HttpResponseResolver.ResolveHttpResponseAsync <TResult>(response));
        }
示例#9
0
 public static Task <TResult> PutAsync <TContent, TResult>(this IWebApiClient webApiClient, Priority priority,
                                                           string path, int retryCount, Func <int, TimeSpan> sleepDurationProvider,
                                                           TContent content = default(TContent), IHttpContentResolver contentResolver = null,
                                                           CancellationToken cancellationToken = default(CancellationToken))
 {
     return(PollyDecorator(
                () => webApiClient.PutAsync <TContent, TResult>(priority, path, cancellationToken: cancellationToken),
                retryCount,
                sleepDurationProvider));
 }
示例#10
0
        public async Task <TResult> PostAsync <TContent, TResult>(Priority priority, string path, TContent content = default(TContent), IHttpContentResolver contentResolver = null)
        {
            var httpClient = GetWebApiClient(priority);

            SetHttpRequestHeaders(httpClient);

            HttpContent httpContent = null;

            if (content != null)
            {
                if (content is HttpContent)
                {
                    httpContent = content as HttpContent;
                }
                else
                {
                    if (contentResolver != null)
                    {
                        httpContent = contentResolver.ResolveHttpContent(content);
                    }
                    else
                    {
                        if (content is Dictionary <string, string> )
                        {
                            httpContent = new DictionaryContentResolver().ResolveHttpContent(content as Dictionary <string, string>);
                        }
                        else
                        {
                            httpContent = HttpContentResolver.ResolveHttpContent(content);
                        }
                    }
                }
            }
            var response = await httpClient
                           .PostAsync(path, httpContent)
                           .ConfigureAwait(false);

            if (!await response.EnsureSuccessStatusCodeAsync())
            {
                return(default(TResult));
            }

            return(await HttpResponseResolver.ResolveHttpResponseAsync <TResult>(response));
        }
        public virtual async Task <TResult> PutAsync <TContent, TResult>(Priority priority, string path,
                                                                         TContent content = default(TContent), IHttpContentResolver contentResolver = null,
                                                                         CancellationToken cancellationToken = default(CancellationToken))
        {
            var httpClient = GetWebApiClient(priority);

            SetHttpRequestHeaders(httpClient);

            var httpContent = ResolveHttpContent(content, contentResolver);
            var response    = await httpClient
                              .PutAsync(path, httpContent, cancellationToken)
                              .ConfigureAwait(false);

            if (!await response.EnsureSuccessStatusCodeAsync())
            {
                return(default(TResult));
            }

            return(await HttpResponseResolver.ResolveHttpResponseAsync <TResult>(response));
        }
        public static async Task <IRestApiResult <TResult> > PostAsync <TContent, TResult>(this RestApiClient apiClient,
                                                                                           Priority priority, string path, TContent content = default(TContent),
                                                                                           ProgressDelegate progressDelegate = null, IHttpContentResolver contentResolver = null)
        {
            var httpClient = apiClient.GetRestApiClient(priority);

            apiClient.SetHttpRequestHeaders(httpClient);

            var httpContent = apiClient.ResolveHttpContent(content);

            var stream = await httpContent.ReadAsStreamAsync();

            var progressContent = new ProgressStreamContent(httpContent.Headers, stream, CancellationToken.None);

            progressContent.Progress = progressDelegate;

            var response = await httpClient
                           .PostAsync(path, progressContent)
                           .ConfigureAwait(false);

            return(await response.BuildRestApiResult <TResult>(apiClient.HttpResponseResolver));
        }