Exemplo n.º 1
0
 private IObservable <HttpResponseMessage> Request(RxHttpRequest httpRequest, HttpMethod method)
 {
     return(SingleObservable.Create(async() =>
     {
         var requestId = Guid.NewGuid();
         httpRequest.RequestInterceptors.ForEach(interceptor => interceptor.Intercept(httpRequest));
         var message = BuildRequestMessage(httpRequest, method);
         var url = message.RequestUri.AbsoluteUri;
         logger?.OnSend(message, requestId);
         var response = await httpClient.SendAsync(message);
         logger?.OnReceive(response, url, message.Method, requestId);
         httpRequest.ResponseInterceptors.ForEach(interceptor => interceptor.Intercept(response));
         try
         {
             if (response.StatusCode >= System.Net.HttpStatusCode.BadRequest)
             {
                 return response.EnsureSuccessStatusCode();
             }
             return response;
         }
         catch (Exception exception)
         {
             throw new RxHttpRequestException(response, exception);
         }
     }));
 }
Exemplo n.º 2
0
 public IObservable <T> Request <T>(RxHttpRequest httpRequest, HttpMethod method)
 {
     return(Request(httpRequest, method)
            .SelectMany(async response => {
         var stream = await response.Content.ReadAsStreamAsync();
         return httpRequest.ResponseMediaType.Deserialize <T>(stream);
     }));
 }
Exemplo n.º 3
0
        private HttpRequestMessage BuildRequestMessage(RxHttpRequest request, HttpMethod method)
        {
            var url            = GetUrl(request);
            var content        = request.BuildContent();
            var requestMessage = new HttpRequestMessage(method, url);

            requestMessage.Content = content;
            requestMessage.Headers.Clear();
            foreach (var pair in request.Headers)
            {
                requestMessage.Headers.Add(pair.Key, pair.Value);
            }

            return(requestMessage);
        }
Exemplo n.º 4
0
        private string GetUrl(RxHttpRequest request)
        {
            var builder = new UriBuilder((httpClient.BaseAddress?.AbsoluteUri ?? string.Empty) + request.Url);

            var query = HttpUtility.ParseQueryString(builder.Query);

            foreach (var entry in request.QueryStrings)
            {
                query[entry.Key] = entry.Value;
            }

            builder.Query = query.ToString();

            return(builder.Uri.AbsoluteUri);
        }