private async Task <HttpResponseMessage> SendHttpRequestAsync( DocuSignRequest request, CancellationToken cancellationToken) { Exception requestException = null; HttpResponseMessage response = null; var httpRequest = this.BuildRequestMessage(request); try { response = await this.httpClient.SendAsync(httpRequest, cancellationToken) .ConfigureAwait(false); } catch (HttpRequestException exception) { requestException = exception; } catch (OperationCanceledException exception) when(!cancellationToken.IsCancellationRequested) { requestException = exception; } if (requestException != null) { throw requestException; } return(response); }
public DocuSignResponse SendRequest(DocuSignRequest request) { CancellationTokenSource cts = new CancellationTokenSource(); Task <DocuSignResponse> t = Task.Run(async() => await SendRequestAsync(request, cts.Token)); t.Wait(); return(t.Result); }
public DocuSignResponse CallApi(DocuSignRequest request) { //InterceptRequest(request); var response = RestClient.SendRequest(request); //InterceptResponse(request, response); return(response); }
public async Task <DocuSignResponse> CallApiAsync(DocuSignRequest request) { //InterceptRequest(request); CancellationTokenSource cts = new CancellationTokenSource(); var response = await RestClient.SendRequestAsync(request, cts.Token); //InterceptResponse(request, response); return(response); }
public async Task <DocuSignResponse> SendRequestAsync(DocuSignRequest request, CancellationToken cancellationToken) { try { var response = await this.SendHttpRequestAsync(request, cancellationToken).ConfigureAwait(false); return(new DocuSignResponse( response.StatusCode, response.Headers.ToDictionary(x => x.Key, x => x.Value.FirstOrDefault()), await response.Content.ReadAsByteArrayAsync().ConfigureAwait(false), response.Content.Headers?.ContentType?.MediaType)); } catch { return(new DocuSignResponse(System.Net.HttpStatusCode.InternalServerError, null, null, string.Empty)); } }
private HttpRequestMessage BuildRequestMessage(DocuSignRequest request) { string contentType = string.IsNullOrEmpty(request.ContentType) ? "application/json" : request.ContentType; var requestMessage = new HttpRequestMessage(request.Method, request.Url); if (request.BodyContent != null) { if (request.BodyContent is byte[]) { requestMessage.Content = new ByteArrayContent(request.BodyContent as byte[]); if (!string.IsNullOrEmpty(request?.ContentDisposition)) { requestMessage.Content.Headers.Add("Content-Disposition", request.ContentDisposition); } } else { requestMessage.Content = new StringContent(request.BodyContent.ToString(), System.Text.Encoding.UTF8, contentType); } if (!requestMessage.Content.Headers.Contains("Content-Type")) { requestMessage.Content.Headers.Add("Content-Type", contentType); } } else { if (request.PostParams?.Count > 0 && request.FileParams?.Count > 0) { string boundary = $"---{Guid.NewGuid()}---"; var multipartFormContent = new MultipartFormDataContent(boundary); multipartFormContent.Add(new StringContent(string.Join("&", request.PostParams.Select(kvp => $"{kvp.Key}={System.Web.HttpUtility.UrlEncode(kvp.Value)}")), System.Text.Encoding.UTF8, "application/x-www-form-urlencoded")); foreach (var file in request.FileParams) { var content = new ByteArrayContent(file.Content); if (!string.IsNullOrEmpty(request?.ContentDisposition)) { content.Headers.Add("Content-Disposition", request?.ContentDisposition); } multipartFormContent.Add(content, file.Name, file.FileName); } requestMessage.Content = multipartFormContent; } else if (request.PostParams?.Count > 0) { requestMessage.Content = new StringContent(string.Join("&", request.PostParams.Select(kvp => $"{kvp.Key}={System.Web.HttpUtility.UrlEncode(kvp.Value)}")), System.Text.Encoding.UTF8, "application/x-www-form-urlencoded"); } else if (request.FileParams?.Count > 0) { var multipartFormContent = new MultipartFormDataContent("boundary"); foreach (var file in request.FileParams) { var content = new ByteArrayContent(file.Content); if (!string.IsNullOrEmpty(request?.ContentDisposition)) { content.Headers.Add("Content-Disposition", request?.ContentDisposition); } multipartFormContent.Add(content, file.Name, file.FileName); } requestMessage.Content = multipartFormContent; } } string uri = request.Url.ToString(); if (request.PathParams?.Count > 0) { foreach (var kvp in request.PathParams) { uri = uri.Replace($"{{{kvp.Key}}}", kvp.Value); } } if (request.QueryParams?.Count > 0) { var qs = "?" + string.Join("&", request.QueryParams .Select(kvp => $"{kvp.Key}={System.Web.HttpUtility.UrlEncode(kvp.Value)}")); uri += qs; } requestMessage.RequestUri = new Uri(uri); if (request.HeaderParams?.Count > 0) { foreach (var kvp in request.HeaderParams) { try { if (!requestMessage.Headers?.Contains(kvp.Key) ?? false) { requestMessage.Headers.Add(kvp.Key, kvp.Value); } } catch { if (!requestMessage.Content?.Headers?.Contains(kvp.Key) ?? false) { requestMessage.Content.Headers.Add(kvp.Key, kvp.Value); } } } } return(requestMessage); }
/// <summary> /// Allows for extending response processing for <see cref="DocuSignClient"/> generated code. /// </summary> /// <param name="request">The <see cref="DocuSignRequest"/> request object</param> /// <param name="response">The <see cref="DocuSignResponse"/> response object</param> public virtual void InterceptResponse(DocuSignRequest request, DocuSignResponse response) { // Override this to add telemetry }
/// <summary> /// Allows for extending request processing for <see cref="DocuSignClient"/> generated code. /// </summary> /// <param name="request">The IHttpClient request object</param> public virtual void InterceptRequest(DocuSignRequest request) { // Override this to add telemetry }