private async Task <HttpResponseMessage> SendAsyncRequest(HttpMethod method, string requestUri,
                                                                  List <KeyValuePair <string, string> > parameters)
        {
            if (parameters == null && (method == HttpMethod.Post || method == HttpMethod.Put))
            {
                throw new InvalidOperationException("Attempt to perform a post or put with no parameters.");
            }

            if (method == HttpMethod.Get || method == HttpMethod.Delete)
            {
                requestUri = requestUri + UserNameParam();
            }
            else
            {
                parameters.Add(new KeyValuePair <string, string>(WebHCatResources.UserName, this.hadoopUserName));
            }

            var request = new HttpRequestMessage(method, requestUri);

            request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(WebHCatResources.ApplicationJson));
            if (method == HttpMethod.Post || method == HttpMethod.Put)
            {
                request.Content = new FormUrlEncodedContent(parameters.Where(kvp => kvp.Value != null));
            }
            var certValidationCallback = new ClusterAmbariApiHelper.CertificateValidationHelper();

            try
            {
                if (!validateServerCert)
                {
                    ServicePointManager.ServerCertificateValidationCallback +=
                        certValidationCallback.ServerCertificateValidationCallback;
                }

                var cts = new CancellationTokenSource();
                cts.CancelAfter(this.Timeout);
                try
                {
                    return(await client.SendAsync(request, HttpCompletionOption.ResponseContentRead, cts.Token));
                }
                catch (TaskCanceledException)
                {
                    throw new HttpResponseException(HttpStatusCode.GatewayTimeout);
                }
            }
            finally
            {
                if (!validateServerCert)
                {
                    ServicePointManager.ServerCertificateValidationCallback -=
                        certValidationCallback.ServerCertificateValidationCallback;
                }
            }
        }
        private async Task<HttpResponseMessage> SendAsyncRequest(HttpMethod method, string requestUri,
                                                     List<KeyValuePair<string, string>> parameters)
        {
            if (parameters == null && (method == HttpMethod.Post || method == HttpMethod.Put))
            {
                throw new InvalidOperationException("Attempt to perform a post or put with no parameters.");
            }

            if (method == HttpMethod.Get || method == HttpMethod.Delete)
            {
                requestUri = requestUri + UserNameParam();
            }
            else
            {
                parameters.Add(new KeyValuePair<string, string>(WebHCatResources.UserName, this.hadoopUserName));
            }

            var request = new HttpRequestMessage(method, requestUri);

            request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(WebHCatResources.ApplicationJson));
            if (method == HttpMethod.Post || method == HttpMethod.Put)
            {
                request.Content = new FormUrlEncodedContent(parameters.Where(kvp => kvp.Value != null));
            }
            var certValidationCallback = new ClusterAmbariApiHelper.CertificateValidationHelper();

            try
            {
                if (!validateServerCert)
                {
                    ServicePointManager.ServerCertificateValidationCallback +=
                        certValidationCallback.ServerCertificateValidationCallback;
                }

                var cts = new CancellationTokenSource();
                cts.CancelAfter(this.Timeout);
                try
                {
                    return await client.SendAsync(request, HttpCompletionOption.ResponseContentRead, cts.Token);
                }
                catch(TaskCanceledException)
                {
                    throw new HttpResponseException(HttpStatusCode.GatewayTimeout);
                }

            }
            finally
            {
                if (!validateServerCert)
                {
                    ServicePointManager.ServerCertificateValidationCallback -=
                        certValidationCallback.ServerCertificateValidationCallback;
                }

            }
        }