public IInteraction TransformClientRequestForRealService(IInteraction clientRequest)
        {
            var builder = new MarkdownInteraction.Builder()
                          .From(clientRequest)
                          .RequestHeaders(clientRequest.RequestHeaders
                                          //Remove unwanted headers from client request
                                          .Where(h => !_requestHeaderExcludePatterns.Any(pattern => pattern.IsMatch($"{h.Item1}: {h.Item2}")))
                                          //Fix host header
                                          .Select(h =>
            {
                (string name, string value) = h;
                if (name.ToLower() == "host")
                {
                    return(name, _realServiceHost);
                }
                else
                {
                    return(h);
                }
            })
                                          );

            return(builder.Build());
        }
        public async Task <ServiceResponse> GetServiceResponseForRequest(Uri host, IInteraction interaction, bool lowerCaseHeaders)
        {
            var response = await _service.InvokeServiceEndpoint(
                interaction.Method, null, null,
                new Uri($"{_redirectHost.GetLeftPart(UriPartial.Authority)}{interaction.Path}"),
                interaction.RequestHeaders);

            var builder = new MarkdownInteraction.Builder()
                          .From(interaction)
                          .ResponseHeaders(response.Headers);

            if (response.Body != null && response.ContentType != null)
            {
                builder.ResponseBody(response.Body.ToString(), response.ContentType);
            }
            else
            {
                builder.RemoveResponseBody();
            }
            var interactionToRecord = builder.Build();

            _allInteractions[interactionToRecord.Number] = interactionToRecord;
            return(response);
        }