public async Task <IResponse> Call(Uri url, IHttpOptions options, CancellationToken cancellationToken)
        {
            var request     = WebRequest.Create(url);
            var httpRequest = request as HttpWebRequest;

            if (httpRequest != null && !String.IsNullOrEmpty(options?.Method))
            {
                httpRequest.Method = options.Method;
                foreach (var header in options.Headers)
                {
                    httpRequest.Headers[header.Key] = header.Value;
                }
            }

            IDisposable registration = null;

            registration = cancellationToken.Register(() =>
            {
                httpRequest.Abort();
                registration?.Dispose();
            });

            try
            {
                var response = await httpRequest.GetResponseAsync();

                if (response is HttpWebResponse httpResponse)
                {
                    return(new HttpResponse(response.ResponseUri, httpResponse));
                }

                return(null);
            }
            catch (WebException error)
            {
                if (error.Status == WebExceptionStatus.RequestCanceled)
                {
                    throw new OperationCanceledException(cancellationToken);
                }

                throw;
            }
        }
        public async Task <IResponse> Call(Uri url, IHttpOptions options, CancellationToken cancellationTokenn)
        {
            var httpRequest = new HttpRequestMessage(new HttpMethod(options?.Method ?? "GET"), url);

            if (options != null)
            {
                foreach (var header in options.Headers)
                {
                    if (!httpRequest.Headers.TryAddWithoutValidation(header.Key, header.Value))
                    {
                        httpRequest.EnsureContentFrom(options.Body).Headers.Add(header.Key, header.Value);
                    }
                }
            }

            var httpResponse = await Client.SendAsync(httpRequest, HttpCompletionOption.ResponseContentRead, cancellationTokenn);

            return(new HttpResponse(url, httpResponse));
        }
Beispiel #3
0
 private async Task <IResponse> MakeRequestTo(Uri url, IHttpOptions options, CancellationToken cancellationToken)
 {
     return(await _httpCall(url, options, cancellationToken));
 }