/// <summary> /// Execute the GET request to the API /// </summary> /// <param name="ct">Cancellation token for long poll request. If set, OperationCanceledException will be thrown if the request is cancelled before completing</param> /// <returns>The result of the GET, including a stream of data</returns> public async Task <QueryResult <Stream> > ExecuteStreaming(CancellationToken ct) { Client.CheckDisposed(); var timer = Stopwatch.StartNew(); var result = new QueryResult <Stream>(); var message = new HttpRequestMessage(HttpMethod.Get, BuildConsulUri(Endpoint, Params)); ApplyHeaders(message, Client.Config); var response = await Client.HttpClient.SendAsync(message, HttpCompletionOption.ResponseHeadersRead, ct).ConfigureAwait(false); ParseQueryHeaders(response, (result as QueryResult <TOut>)); result.StatusCode = response.StatusCode; ResponseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); result.Response = ResponseStream; if (response.StatusCode != HttpStatusCode.NotFound && !response.IsSuccessStatusCode) { throw new ConsulRequestException(string.Format("Unexpected response, status code {0}", response.StatusCode), response.StatusCode); } result.RequestTime = timer.Elapsed; return(result); }
/// <summary> /// Execute the PUT request to the API /// </summary> /// <param name="ct">Cancellation token for long poll request. If set, OperationCanceledException will be thrown if the request is cancelled before completing</param> /// <returns>The result of the PUT</returns> public async Task <WriteResult> Execute(CancellationToken ct) { Client.CheckDisposed(); timer.Start(); var result = new WriteResult(); var message = new HttpRequestMessage(HttpMethod.Put, BuildConsulUri(Endpoint, Params)); ApplyHeaders(message, Client.Config); var response = await Client.HttpClient.SendAsync(message, ct).ConfigureAwait(false); result.StatusCode = response.StatusCode; ResponseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); if (response.StatusCode != HttpStatusCode.NotFound && !response.IsSuccessStatusCode) { if (ResponseStream == null) { throw new ConsulRequestException(string.Format("Unexpected response, status code {0}", response.StatusCode), response.StatusCode); } using (var sr = new StreamReader(ResponseStream)) { throw new ConsulRequestException(string.Format("Unexpected response, status code {0}: {1}", response.StatusCode, sr.ReadToEnd()), response.StatusCode); } } result.RequestTime = timer.Elapsed; timer.Stop(); return(result); }
/// <summary> /// Execute the POST request to the API /// </summary> /// <param name="ct">Cancellation token for long poll request. If set, OperationCanceledException will be thrown if the request is cancelled before completing</param> /// <returns>The result of the POST</returns> public async Task <WriteResult> Execute(CancellationToken ct) { Client.CheckDisposed(); timer.Start(); var result = new WriteResult(); HttpContent content = null; if (typeof(TIn) == typeof(byte[])) { var bodyBytes = (_body as byte[]); if (bodyBytes != null) { content = new ByteArrayContent(bodyBytes); } // If body is null and should be a byte array, then just don't send anything. } else { content = new ByteArrayContent(Serialize(_body)); } var message = new HttpRequestMessage(HttpMethod.Post, BuildConsulUri(Endpoint, Params)); ApplyHeaders(message, Client.Config); message.Content = content; var response = await Client.HttpClient.SendAsync(message, ct).ConfigureAwait(false); result.StatusCode = response.StatusCode; ResponseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); if (response.StatusCode != HttpStatusCode.NotFound && !response.IsSuccessStatusCode) { if (ResponseStream == null) { throw new ConsulRequestException(string.Format("Unexpected response, status code {0}", response.StatusCode), response.StatusCode); } using (var sr = new StreamReader(ResponseStream)) { throw new ConsulRequestException(string.Format("Unexpected response, status code {0}: {1}", response.StatusCode, sr.ReadToEnd()), response.StatusCode); } } result.RequestTime = timer.Elapsed; timer.Stop(); return(result); }
public async Task <WriteResult <TOut> > Execute(CancellationToken ct) { Client.CheckDisposed(); timer.Start(); var result = new WriteResult <TOut>(); HttpContent content = null; if (UseRawRequestBody) { if (_body != null) { content = new ByteArrayContent((_body as byte[]) ?? new byte[0]); } // If body is null and should be a byte array, then just don't send anything. } else { content = new ByteArrayContent(Serialize(_body)); } var response = await Client.HttpClient.PostAsync(BuildConsulUri(Endpoint, Params), content, ct).ConfigureAwait(false); result.StatusCode = response.StatusCode; ResponseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); if (response.StatusCode != HttpStatusCode.NotFound && !response.IsSuccessStatusCode) { if (ResponseStream == null) { throw new ConsulRequestException(string.Format("Unexpected response, status code {0}", response.StatusCode)); } using (var sr = new StreamReader(ResponseStream)) { throw new ConsulRequestException(string.Format("Unexpected response, status code {0}: {1}", response.StatusCode, sr.ReadToEnd())); } } if (response.IsSuccessStatusCode) { result.Response = Deserialize <TOut>(ResponseStream); } result.RequestTime = timer.Elapsed; timer.Stop(); return(result); }
/// <summary> /// Execute the DELETE request to the API /// </summary> /// <param name="ct">Cancellation token for long poll request. If set, OperationCanceledException will be thrown if the request is cancelled before completing</param> /// <returns>The result of the DELETE</returns> public async Task <WriteResult> Execute(CancellationToken ct) { Client.CheckDisposed(); var result = new WriteResult(); var timer = Stopwatch.StartNew(); HttpContent content; if (typeof(TIn) == typeof(byte[])) { content = new ByteArrayContent((_body as byte[]) ?? new byte[0]); } else if (typeof(TIn) == typeof(Stream)) { content = new StreamContent((_body as Stream) ?? new MemoryStream()); } else { content = new ByteArrayContent(Serialize(_body)); } var message = new HttpRequestMessage(HttpMethod.Delete, BuildConsulUri(Endpoint, Params)); ApplyHeaders(message, Client.Config); message.Content = content; var response = await Client.HttpClient.SendAsync(message, ct).ConfigureAwait(false); result.StatusCode = response.StatusCode; ResponseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); if (response.StatusCode != HttpStatusCode.NotFound && !response.IsSuccessStatusCode) { if (ResponseStream == null) { throw new ConsulRequestException(string.Format("Unexpected response, status code {0}", response.StatusCode), response.StatusCode); } using (var sr = new StreamReader(ResponseStream)) { throw new ConsulRequestException(string.Format("Unexpected response, status code {0}: {1}", response.StatusCode, sr.ReadToEnd()), response.StatusCode); } } result.RequestTime = timer.Elapsed; return(result); }
public async Task <WriteResult <TOut> > Execute(CancellationToken ct) { Client.CheckDisposed(); timer.Start(); var result = new WriteResult <TOut>(); var response = await Client.HttpClient.DeleteAsync(BuildConsulUri(Endpoint, Params), ct).ConfigureAwait(false); result.StatusCode = response.StatusCode; ResponseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); if (response.StatusCode != HttpStatusCode.NotFound && !response.IsSuccessStatusCode) { if (ResponseStream == null) { throw new ConsulRequestException(string.Format("Unexpected response, status code {0}", response.StatusCode)); } using (var sr = new StreamReader(ResponseStream)) { throw new ConsulRequestException(string.Format("Unexpected response, status code {0}: {1}", response.StatusCode, sr.ReadToEnd())); } } if (response.IsSuccessStatusCode) { result.Response = Deserialize <TOut>(ResponseStream); } result.RequestTime = timer.Elapsed; timer.Stop(); return(result); }