Beispiel #1
0
 /// <summary>
 /// Prepares the header requests, copying from the RestFluencing Request to the HttpRequestMessage.
 /// </summary>
 /// <param name="request"></param>
 /// <param name="httpRequest"></param>
 protected virtual void PrepareRequestHeaders(IApiClientRequest request, HttpRequestMessage httpRequest)
 {
     foreach (var h in request.Headers)
     {
         httpRequest.Headers.TryAddWithoutValidation(h.Key, h.Value);
     }
 }
Beispiel #2
0
        /// <summary>
        /// Executes the request and creates an response object
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public IApiClientResponse ExecuteRequest(IApiClientRequest request)
        {
            IApiClientResponse result = new ApiClientResponse();

            try
            {
                HttpClient client = CreateClient();

                var httpRequest = CreateHttpRequest(request);

                PrepareRequestHeaders(request, httpRequest);

                var contentType = GetContentTypeHeaderValue(request);

                PrepareRequestContent(request, httpRequest, contentType);

                // Set the timeout just prior to making the request to reduce the risk of unintended overrides
                client.Timeout = TimeSpan.FromSeconds(request.TimeoutInSeconds);

                using (HttpResponseMessage response = client.SendAsync(httpRequest).GetAwaiter().GetResult())
                {
                    result.Status     = (int)response.StatusCode;
                    result.StatusCode = (HttpStatusCode)(int)response.StatusCode;
                    result.Headers    = CreateHeaders(response.Headers, response.Content.Headers);
                    result.Content    = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
                    return(result);
                }
            }
            finally
            {
                DisposeClient();
            }
        }
        /// <summary>
        /// Executes the request and creates an response object
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public IApiClientResponse ExecuteRequest(IApiClientRequest request)
        {
            IApiClientResponse result = new ApiClientResponse();

            try
            {
                HttpClient client = CreateClient();

                var httpRequest = CreateHttpRequest(request);

                const string contentTypeHeader = "content-type";
                string       contentType       = null;

                foreach (var h in request.Headers)
                {
                    //because the api keeps overriding the content type we have to find what we defined before
                    IList <string> values;
                    if (h.Key.Equals(contentTypeHeader, StringComparison.InvariantCultureIgnoreCase) &&
                        request.Headers.TryGetValue(h.Key, out values))
                    {
                        contentType = values.First();
                    }

                    httpRequest.Headers.TryAddWithoutValidation(h.Key, h.Value);
                }

                var multiPartContent = request as MultipartFormClientRequest;
                if (multiPartContent is null) // default string content behaviour
                {
                    if (contentType != null)
                    {
                        httpRequest.Content = new StringContent(request.Content, Encoding.UTF8, contentType);
                    }
                    else
                    {
                        httpRequest.Content = new StringContent(request.Content);
                    }
                }
                else // the new multipart content
                {
                    httpRequest.Content = multiPartContent.MultipartContent;
                }

                // Set the timeout just prior to making the request to reduce the risk of unintended overrides
                client.Timeout = TimeSpan.FromSeconds(request.TimeoutInSeconds);

                using (HttpResponseMessage response = client.SendAsync(httpRequest).GetAwaiter().GetResult())
                {
                    result.Status     = (int)response.StatusCode;
                    result.StatusCode = (HttpStatusCode)(int)response.StatusCode;
                    result.Headers    = CreateHeaders(response.Headers, response.Content.Headers);
                    result.Content    = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
                    return(result);
                }
            }
            finally
            {
                DisposeClient();
            }
        }
Beispiel #4
0
 /// <summary>
 /// Prepares the request content. By default, creates a string content with the provided contentType.
 /// </summary>
 /// <param name="request"></param>
 /// <param name="httpRequest"></param>
 /// <param name="contentType"></param>
 protected virtual void PrepareRequestContent(IApiClientRequest request, HttpRequestMessage httpRequest,
                                              string contentType)
 {
     if (request.Content != null)
     {
         if (contentType != null)
         {
             httpRequest.Content = new StringContent(request.Content, Encoding.UTF8, contentType);
         }
         else
         {
             httpRequest.Content = new StringContent(request.Content);
         }
     }
 }
Beispiel #5
0
        /// <inheritdoc />
        protected override void PrepareRequestContent(IApiClientRequest request, HttpRequestMessage httpRequest, string contentType)
        {
            var multiPartContent = request as MultipartFormClientRequest;

            if (multiPartContent is null)
            {
                // default string content behaviour
                base.PrepareRequestContent(request, httpRequest, contentType);
            }
            else
            {
                // the new multipart content
                httpRequest.Content = multiPartContent.MultipartContent;
            }
        }
Beispiel #6
0
 public IApiClientResponse ExecuteRequest(IApiClientRequest request)
 {
     if (Responses[request.Uri.AbsolutePath] == null)
     {
         return(new ApiClientResponse()
         {
             Content = "",
             StatusCode = HttpStatusCode.OK
         });
     }
     return(new ApiClientResponse()
     {
         Content = JsonConvert.SerializeObject(Responses[request.Uri.AbsolutePath]),
         StatusCode = HttpStatusCode.OK
     });
 }
Beispiel #7
0
        /// <summary>
        /// Executes the request and creates an response object
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public IApiClientResponse ExecuteRequest(IApiClientRequest request)
        {
            using (HttpClient client = new HttpClient())
            {
                IApiClientResponse result = new ApiClientResponse();

                var          httpRequest       = new HttpRequestMessage(new HttpMethod(request.Verb.ToString().ToUpper()), request.Uri);
                const string contentTypeHeader = "content-type";
                string       contentType       = null;

                foreach (var h in request.Headers)
                {
                    //because the api keeps overriding the content type we have to find what we defined before
                    IList <string> values;
                    if (h.Key.Equals(contentTypeHeader, StringComparison.InvariantCultureIgnoreCase) &&
                        request.Headers.TryGetValue(h.Key, out values))
                    {
                        contentType = values.First();
                    }
                    httpRequest.Headers.TryAddWithoutValidation(h.Key, h.Value);
                }

                if (request.Content != null)
                {
                    if (contentType != null)
                    {
                        httpRequest.Content = new StringContent(request.Content, Encoding.UTF8, contentType);
                    }
                    else
                    {
                        httpRequest.Content = new StringContent(request.Content);
                    }
                }

                // Set the timeout just prior to making the request to reduce the risk of unintended overrides (TODO make the HttpClient a singleton)
                client.Timeout = TimeSpan.FromSeconds(request.TimeoutInSeconds);

                using (HttpResponseMessage response = client.SendAsync(httpRequest).GetSyncResult())
                {
                    result.Status     = (int)response.StatusCode;
                    result.StatusCode = (HttpStatusCode)(int)response.StatusCode;
                    result.Headers    = CreateHeaders(response.Content.Headers);
                    result.Content    = response.Content.ReadAsStringAsync().GetSyncResult();
                    return(result);
                }
            }
        }
Beispiel #8
0
        /// <summary>
        /// Retrieves the Content Type header defined in the RestFluencing Request.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        protected virtual string GetContentTypeHeaderValue(IApiClientRequest request)
        {
            //because the api keeps overriding the content type we have to find what we defined before
            const string contentTypeHeader = "content-type";
            string       contentType       = null;

            foreach (var h in request.Headers)
            {
                IList <string> values;
                if (h.Key.Equals(contentTypeHeader, StringComparison.InvariantCultureIgnoreCase) &&
                    request.Headers.TryGetValue(h.Key, out values))
                {
                    contentType = values.First();
                }
            }

            return(contentType);
        }
 public IApiClientResponse ExecuteRequest(IApiClientRequest request)
 {
     if (Responses[request.Uri.AbsolutePath] == null)
     {
         return(new ApiClientResponse()
         {
             Content = "",
             StatusCode = HttpStatusCode.OK,
             Headers = new Dictionary <string, IEnumerable <string> >()
         });
     }
     return(new ApiClientResponse()
     {
         Content = JsonConvert.SerializeObject(Responses[request.Uri.AbsolutePath]),
         StatusCode = HttpStatusCode.OK,
         Headers = new Dictionary <string, IEnumerable <string> >()
     });
 }
Beispiel #10
0
 /// <summary>
 /// Creates the HttpRequestMessage from the IApiClientRequest
 /// </summary>
 /// <param name="request"></param>
 /// <returns></returns>
 protected virtual HttpRequestMessage CreateHttpRequest(IApiClientRequest request)
 {
     return(new HttpRequestMessage(new HttpMethod(request.Verb.ToString().ToUpper()), request.Uri));
 }