/// <summary> /// Send http request and return <see cref="HttpResponseMessage"/> received. /// </summary> /// <param name="url">Url to be requested.</param> /// <param name="data">Data to be sent.</param> /// <param name="options">Request options.</param> /// <returns>Asynchronous task.</returns> protected async Task <HttpResponseMessage> GetResponseMessageAsync(string url, object data = null, HttpRequestOptions options = null) { if (options == null) { options = new HttpRequestOptions(); } using (var client = new HttpClient(InnerHandler ?? new HttpClientHandler(), InnerHandler == null)) { client.BaseAddress = new Uri(BaseUrl); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/octet-stream")); var request = new HttpRequestMessage(options.Method, url); if (options.Method != HttpMethod.Get && data != null) { request.Content = data as HttpContent ?? new StringContent(data.ToString(), Encoding.UTF8); } try { var response = await client.SendAsync(request, options.Completion, options.Token).ConfigureAwait(false); if (!response.IsSuccessStatusCode) { OnError(response, null); } return(response); } catch (Exception e) { OnError(null, e); } } return(null); }
private async Task <T> CallWebHDFS <T>(string path, string operation, HttpContent content = null, HttpRequestOptions options = null) where T : IJObject, new() { string uri = GetUriForOperation(path).SetQueryParam("op", operation); if (options.AdditionalQueryParameters != null) { uri = uri.SetQueryParams(options.AdditionalQueryParameters); } var response = await GetResponseMessageAsync(uri, content, options ?? new HttpRequestOptions()); if (response.IsSuccessStatusCode) { var jobj = JObject.Parse(await response.Content.ReadAsStringAsync()); if (jobj == null) { return(default(T)); } var result = new T() as IJObject; result.Parse(jobj); return((T)result); } return(default(T)); }