/// <summary>
        /// Send a GET request to the specified Uri as an asynchronous operation.
        /// </summary>
        /// <param name="url">The Uri the request is sent to</param>
        /// <returns>The task object representing the asynchronous operation</returns>
        private async Task <HttpResponseMessage> GetResponse(string url)
        {
            HttpResponseMessage response = null;

            var requestUri = GetUrl(url);

            using (var request = CreateHttpRequestMessage(requestUri, HttpMethod.Get, null))
            {
                var client = HttpClientSingleton.GetClient();

                response = await client.SendAsync(request).ConfigureAwait(false);
            }

            return(response);
        }
        private HttpClient GetClient()
        {
            return(HttpClientSingleton.GetClient());

            //HttpClient output = null;

            //if (UseDefaultCredentials)
            //{
            //    output = new HttpClient(new HttpClientHandler()
            //    {
            //        UseDefaultCredentials = true
            //    });
            //}
            //else
            //{
            //    output = new HttpClient();
            //}

            //return output;
        }
        /// <summary>
        /// Sends an object to a web api endpoint using the POST Http verb
        /// </summary>
        /// <typeparam name="T">input generic param type</typeparam>
        /// <param name="url">The Uri the request is sent to.</param>
        /// <param name="payload">payload object</param>
        /// <param name="credentials">ApiCredentials</param>
        /// <returns>Response</returns>
        public async Task <Response <TOutput> > PostItemAsync <TInput, TOutput>(string url, TInput payload, ApiCredentials credentials = null)
            where TInput : new()
            where TOutput : new()
        {
            Validate(url, credentials);

            var output = new Response <TOutput>();

            try
            {
                var requestUri = GetUrl(url);

                using (var request = CreateHttpRequestMessage(requestUri, HttpMethod.Post, null))
                {
                    var client = HttpClientSingleton.GetClient();

                    using (var response = await client.PostAsJsonAsync(requestUri, payload).ConfigureAwait(false))
                    {
                        if (response.IsSuccessStatusCode)
                        {
                            response.EnsureSuccessStatusCode();

                            output.IsOk       = true;
                            output.StatusCode = response.StatusCode;

                            GetResponseContent <TOutput>(output, response);
                        }
                        else
                        {
                            GetDetails(output, response);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                HandleError(output, e);
            }

            return(output);
        }