/// <summary> CREATE and EXECUTE ASYNC Request with contentType, json by default </summary>
        public async Task <TResult> ExecuteAsync <TResult>(HttpMethod httpMethod, string path, object data, string contentType = null)
        {
            TResult             result = default;
            HttpResponseMessage httpResponse;

            try
            {
                using (var httpRequest = CreateHttpRequest(httpMethod, path, data, contentType))
                {
                    httpResponse = await _httpClient.SendAsync(httpRequest);
                }
            }
            catch (Exception ex)
            {
                _logger.Error(ex.GetApiMessageInfo());
                //response.EnsureSuccessStatusCode();
                httpResponse = new HttpResponseMessage(HttpStatusCode.Conflict)
                {
                    ReasonPhrase = ex.GetApiMessageInfo()
                };
                HttpContext.Response.StatusCode = (int)HttpStatusCode.Conflict;
                ResponseDetails = CreateResponseDetails <TResult>(httpResponse, ex);
            }

            // SuccessStatusCode
            if (httpResponse != null)
            {
                if (httpResponse.IsSuccessStatusCode)
                {
                    result = await GetResponseResult <TResult>(httpResponse);

#if DEBUG
                    ResponseDetails = CreateResponseDetails <TResult>(httpResponse);
#endif
                }
                else
                {
                    if (ResponseDetails == null)
                    {
                        ResponseDetails = CreateResponseDetails <TResult>(httpResponse);
                    }
                    _logger.Error(ResponseDetails.ToString());
                }
            }

            _httpContext = null;
            return(result);
        }