Skip to content

Instantly share code, notes, and snippets.

@anaisbetts
Created September 9, 2012 03:55
Show Gist options
  • Save anaisbetts/3682477 to your computer and use it in GitHub Desktop.
Save anaisbetts/3682477 to your computer and use it in GitHub Desktop.
public static class HttpClientRxMixins
{
public static IObservable<T> RequestAsync<T>(this HttpClient This, string requestUri)
{
return This.GetAsync(requestUri).ToObservable()
.ThrowOnRestResponseFailure()
.SelectMany(x => x.Content.ReadAsStringAsync().ToObservable())
.SelectMany(x => JsonConvert.DeserializeObjectAsync<T>(x).ToObservable());
}
public static IObservable<T> RequestAsync<T>(this HttpClient This, HttpRequestMessage request)
{
return This.SendAsync(request).ToObservable()
.ThrowOnRestResponseFailure()
.SelectMany(x => x.Content.ReadAsStringAsync().ToObservable())
.SelectMany(x => JsonConvert.DeserializeObjectAsync<T>(x).ToObservable());
}
public static IObservable<HttpResponseMessage> RequestAsync(this HttpClient This, HttpRequestMessage request)
{
return This.SendAsync(request).ToObservable().ThrowOnRestResponseFailure();
}
public static IObservable<HttpResponseMessage> ThrowOnRestResponseFailure(this IObservable<HttpResponseMessage> This)
{
return This.SelectMany(x => {
try {
x.EnsureSuccessStatusCode();
} catch (Exception ex) {
return Observable.Throw<HttpResponseMessage>(ex);
}
return Observable.Return(x);
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment