/// <summary>
        /// Invoke the middleware.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task Invoke(HttpContext context)
        {
            if (!_provider.CheckRequestAcceptsCompression(context))
            {
                await _next(context);

                return;
            }

            var originalBodyFeature        = context.Features.Get <IHttpResponseBodyFeature>();
            var originalCompressionFeature = context.Features.Get <IHttpsCompressionFeature>();

            var compressionBody = new ResponseCompressionBody(context, _provider, originalBodyFeature);

            context.Features.Set <IHttpResponseBodyFeature>(compressionBody);
            context.Features.Set <IHttpsCompressionFeature>(compressionBody);

            try
            {
                await _next(context);

                await compressionBody.FinishCompressionAsync();
            }
            finally
            {
                context.Features.Set(originalBodyFeature);
                context.Features.Set(originalCompressionFeature);
            }
        }
        private async Task InvokeCore(HttpContext context)
        {
            var originalBodyFeature        = context.Features.Get <IHttpResponseBodyFeature>();
            var originalCompressionFeature = context.Features.Get <IHttpsCompressionFeature>();

            Debug.Assert(originalBodyFeature != null);

            var compressionBody = new ResponseCompressionBody(context, _provider, originalBodyFeature);

            context.Features.Set <IHttpResponseBodyFeature>(compressionBody);
            context.Features.Set <IHttpsCompressionFeature>(compressionBody);

            try
            {
                await _next(context);

                await compressionBody.FinishCompressionAsync();
            }
            finally
            {
                context.Features.Set(originalBodyFeature);
                context.Features.Set(originalCompressionFeature);
            }
        }