public async Task Invoke(HttpContext context)
        {
            if (context.Request.Path.StartsWithSegments(_pathPrefix) || _pathPrefixIsRoot)
            {
                var didProxyRequest = await ConditionalProxy.PerformProxyRequest(
                    context, _httpClient, _targetTask, _applicationStoppingToken);

                if (didProxyRequest)
                {
                    return;
                }
            }

            // Not a request we can proxy
            await _next.Invoke(context);
        }
        public ConditionalProxyMiddleware(
            RequestDelegate next,
            string pathPrefix,
            TimeSpan requestTimeout,
            Task <ConditionalProxyMiddlewareTarget> targetTask,
            IApplicationLifetime applicationLifetime)
        {
            if (!pathPrefix.StartsWith("/"))
            {
                pathPrefix = "/" + pathPrefix;
            }

            _next                     = next;
            _pathPrefix               = pathPrefix;
            _pathPrefixIsRoot         = string.Equals(_pathPrefix, "/", StringComparison.Ordinal);
            _targetTask               = targetTask;
            _httpClient               = ConditionalProxy.CreateHttpClientForProxy(requestTimeout);
            _applicationStoppingToken = applicationLifetime.ApplicationStopping;
        }