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); } })); }
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); })); }
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); }
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); }