public IHttpRestResponse <T> CloneInTo <T>(IHttpRestResponse resp) where T : new()
        {
            HttpRestResponse <T> respT = new HttpRestResponse <T>
            {
                Request             = resp.Request,
                Content             = resp.Content,
                StatusCode          = resp.StatusCode,
                StatusDescription   = resp.StatusDescription,
                Headers             = resp.Headers,
                IsSuccessStatusCode = resp.IsSuccessStatusCode,
                ErrorException      = resp.ErrorException
            };

            if (resp.StatusCode == HttpStatusCode.NoContent)
            {
                if (IsEnumarable(respT.Data))                 // Return empty list if Enumarable
                {
                    respT.Data = new T();
                }
            }
            else if (resp.StatusCode == HttpStatusCode.NotFound)
            {
                if (IsEnumarable(respT.Data))                 // Return empty list if Enumarable
                {
                    respT.Data = new T();
                }
            }
            else
            {
                respT.Data = NewtonsoftJsonSerializer.Default.Deserialize <T>(resp.Content);
            }
            return(respT);
        }
        private async Task <IHttpRestResponse> ExecuteInternalAsync(IHttpRestRequest request)
        {
            string             apiUrl         = _url + "/" + request.QueryUrl;
            HttpRequestMessage requestMessage = new HttpRequestMessage(request.Method, new Uri(apiUrl));

            if (_hasIDServerResourceOwnerClientSettings)
            {
                string bearerToken = await AccessTokenCache.GetIdServerAccessToken(_idServerResourceOwnerClientSettings, InternalHttpClientHandler).ConfigureAwait(false);

                request.SetHeader("Authorization", string.Format("Bearer {0}", bearerToken));
            }

            requestMessage.Headers.Add("Accept", "application/json");
            foreach (KeyValuePair <string, string> item in request.Headers)
            {
                requestMessage.Headers.Add(item.Key, item.Value.ToString());
            }
            if (request.JsonBody.Length > 0)
            {
                var jsonBody = new StringContent(request.JsonBody, Encoding.UTF8, "application/json");
                requestMessage.Content = jsonBody;
            }

            HttpResponseMessage response = await HttpClient.SendAsync(requestMessage).ConfigureAwait(false);

            CheckResponseError(response);

            Stream stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);

            var    sr      = new StreamReader(stream);
            string content = sr.ReadToEnd();

            IHttpRestResponse resp = new HttpRestResponse()
            {
                Request    = request,
                Content    = content,
                StatusCode = response.StatusCode,
                Headers    = response.Headers
            };

            return(resp);
        }