Пример #1
0
        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));
            }
        }
Пример #2
0
        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);
        }