private async Task <HttpResponseMessage> GetResponseMessageForPostAsync(HttpRequestMessage requestMessage, IApiRequest request) { Ensure.ArgumentNotNull(nameof(requestMessage), requestMessage); ServicePointManager.SecurityProtocol = Security.DefaultSecurityProtocolType; //TODO: check if even needed _httpClient.BaseAddress = new Uri(requestMessage.RequestUri + (requestMessage.RequestUri.ToString().EndsWith(@"/") ? string.Empty : @"/")); if (request.AuthenticationHandler != null && request.AuthenticationHandler.GetType() == typeof(BasicAuthenticator)) { _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( Keys.Basic, ApiSiteHelpers.GetBasicCredentials((BasicAuthenticator)request.AuthenticationHandler)); } _httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(MimeTypes.ApplicationJson)); try { var responseMessage = await _httpClient.PostAsync(request.Route, requestMessage.Content); return(responseMessage); } catch (WebException webException) { var code = (webException.Response as HttpWebResponse)?.StatusCode ?? HttpStatusCode.InternalServerError; return(new HttpResponseMessage(code)); } catch (Exception) { return(new HttpResponseMessage(HttpStatusCode.InternalServerError)); } }
protected virtual HttpRequestMessage BuildRequestMessage(IApiRequest request) { Ensure.ArgumentNotNull(nameof(request), request); HttpRequestMessage requestMessage = null; try { var fullUri = request.BaseAddress; requestMessage = new HttpRequestMessage(request.Method, fullUri); foreach (var header in request.Headers) { requestMessage.Headers.Add(header.Key, header.Value); } var httpContent = request.Data as HttpContent; if (httpContent != null) { requestMessage.Content = httpContent; } var body = request.Data as string; if (body != null) { requestMessage.Content = new StringContent(body, Encoding.UTF8, request.ContentType); } var bodyStream = request.Data as Stream; if (bodyStream != null) { requestMessage.Content = new StreamContent(bodyStream); requestMessage.Content.Headers.ContentType = new MediaTypeHeaderValue(request.ContentType); } if (request.AuthenticationHandler != null && request.AuthenticationHandler.GetType() == typeof(BasicAuthenticator)) { requestMessage.Headers.Authorization = new AuthenticationHeaderValue(Keys.Basic, ApiSiteHelpers.GetBasicCredentials((BasicAuthenticator)request.AuthenticationHandler)); } } catch (Exception) { requestMessage?.Dispose(); throw; } return(requestMessage); }