private async Task <HttpResponseMessage> SendAsync(IEnumerable <KeyValuePair <string, string> > parameters, HttpContent content, Func <HttpRequestMessage> requestFactory)
        {
            if (!IsAuthenticated && !SuppressAuthentication)
            {
                //Log.Debug("Authentication is not performed. Sending auth request now.");
                Authenticate();
            }
            using (var request = requestFactory())
            {
                HttpResponseMessage response      = null;
                IHttpCallLogHelper  webCallLogger = null;
                if (content != null)
                {
                    using (content)
                    {
                        request.Content = content;
                        webCallLogger   = LogRequest(content is MultipartFormDataContent
                            ? $"---MULTIPART-FORM-DATA-CONTENT---[size:{content.Headers.ContentLength}; number of parts:{(content as MultipartFormDataContent).Count()};]"
                            : content.ReadAsStringAsync().Result, request);
                        response = await _httpClient.SendAsync(request);
                    }
                }
                else
                {
                    webCallLogger = LogRequest(null, request);
                    response      = await _httpClient.SendAsync(request);
                }

                LogResponse(response, webCallLogger);
                return(response);
            }
        }
        private async Task <HttpResponseMessage> SendAsync(IEnumerable <KeyValuePair <string, string> > parameters, HttpContent content, Func <HttpRequestMessage> requestFactory, string contentType = DefaultContentType)
        {
            using (var request = requestFactory())
            {
                HttpResponseMessage response      = null;
                IHttpCallLogHelper  webCallLogger = null;

                if (content != null)
                {
                    using (content)
                    {
                        request.Content = content;
                        webCallLogger   = LogRequest(content is MultipartFormDataContent
                            ? $"---MULTIPART-FORM-DATA-CONTENT---[size:{content.Headers.ContentLength}; number of parts:{(content as MultipartFormDataContent).Count()};]"
                            : content.ReadAsStringAsync().Result, request);
                        request.Headers.Clear();
                        request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(DefaultContentType));
                        response = await _httpClient.SendAsync(request);
                    }
                }
                else
                {
                    webCallLogger = LogRequest(null, request);
                    request.Headers.Clear();
                    request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(DefaultContentType));
                    response = await _httpClient.SendAsync(request);
                }

                LogResponse(response, webCallLogger);
                return(response);
            }
        }
 private void LogResponse(HttpResponseMessage response, IHttpCallLogHelper webCallLogger)
 {
     webCallLogger?.Response(response.Headers.Select(x => new KeyValuePair <string, string>(x.Key, string.Join(",", x.Value))),
                             _cookieContainer.GetCookies(_httpClient.BaseAddress)//new Uri(TestConfig.ServerURL))//TODO: it is possible that not all cookies will be extracted, still will work for vast majority of cases
                             .Cast <Cookie>()
                             .Select(x => new KeyValuePair <string, string>(x.Name, x.Value)),
                             response.Content.ReadAsStringAsync().Result, response.StatusCode);
     webCallLogger?.Dispose();
 }
        private IHttpCallLogHelper LogRequest(string content, HttpRequestMessage request)
        {
            IHttpCallLogHelper webCallLogger = Logger?.GetHttpCallLogger();

            webCallLogger?.Request(request.Headers.Select(x => new KeyValuePair <string, string>(x.Key, string.Join(",", x.Value))),
                                   new Dictionary <string, string>()
                                   , content, request.RequestUri, request.Method.Method);
            return(webCallLogger);
        }
        private IHttpCallLogHelper LogRequest(string content, HttpRequestMessage request)
        {
            IHttpCallLogHelper webCallLogger = Logger?.GetHttpCallLogger();

            webCallLogger?.Request(request.Headers.Select(x => new KeyValuePair <string, string>(x.Key, string.Join(",", x.Value))),
                                   _cookieContainer.GetCookies(request.RequestUri.IsAbsoluteUri ? new Uri(request.RequestUri.AbsoluteUri.Replace(request.RequestUri.PathAndQuery, string.Empty)) : _httpClient.BaseAddress)
                                   .Cast <Cookie>()
                                   .Select(x => new KeyValuePair <string, string>(x.Name, x.Value))
                                   , content, request.RequestUri, request.Method.Method);
            return(webCallLogger);
        }
        private async Task <HttpResponseMessage> SendRequestAsync(string url, IEnumerable <KeyValuePair <string, string> > parameters, string content, HttpMethod httpMethod, string contentType = DefaultContentType)
        {
            using (var request = new HttpRequestMessage()
            {
                RequestUri = new Uri($"{TestConfig.GetValueFromConfig("MatchingProWeb")}{url}"),
                Method = httpMethod,
            })
            {
                HttpResponseMessage response      = null;
                IHttpCallLogHelper  webCallLogger = null;
                var body = new StringContent(content ?? string.Empty, Encoding.UTF8, "application/json");
                body.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                request.Content          = body;
                webCallLogger            = LogRequest(content, request);
                response = await _httpClient.SendAsync(request);

                LogResponse(response, webCallLogger);
                return(response);
            }
        }
 private void LogResponse(HttpResponseMessage response, IHttpCallLogHelper webCallLogger)
 {
     webCallLogger?.Response(response.Headers.Select(x => new KeyValuePair <string, string>(x.Key, string.Join(",", x.Value))), new Dictionary <string, string>(),
                             response.Content.ReadAsStringAsync().Result, response.StatusCode);
     webCallLogger?.Dispose();
 }