public static void SetContentStream(this IInterceptedStream intercepted, Stream stream, ILogger logger)
        {
            intercepted.Body          = null;
            intercepted.Stream        = stream;
            intercepted.ContentLength = stream.Length;

            if (intercepted.HttpHeaders.ContainsKey("Content-Length"))
            {
                var headers = intercepted.HttpHeaders.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
                headers["Content-Length"] = intercepted.ContentLength.ToString();
                intercepted.HttpHeaders   = headers;
            }
        }
        private static Stream CreateStream(IInterceptedStream intercepted, ILogger logger)
        {
            if (intercepted.Stream == null)
            {
                return(new MemoryStream(intercepted.Body ?? Array.Empty <byte>()));
            }

            if (intercepted.Stream.CanSeek)
            {
                return(intercepted.Stream);
            }

            logger.Information("Interceptor accessed the content of the response. Creating a COPY of the content stream to allow multiple reads of the response stream.");

            var stream = new MemoryStream();

            intercepted.Stream.CopyTo(stream);
            stream.Position = 0;

            return(stream);
        }
 public static Stream GetContentStream(this IInterceptedStream intercepted, ILogger logger)
 {
     intercepted.Stream = CreateStream(intercepted, logger);
     return(intercepted.Stream);
 }