Exemple #1
0
        public async Task Invoke(HttpContext context, IHttpLoggingProvider httpLogging)
        {
            context.Request.EnableBuffering();

            var originalBody = context.Response.Body;

            var bodyStream = _recyclableMemoryStreamManager.GetStream();

            context.Response.Body = bodyStream;

            var responseBodyWrapper = new HttpResponseBodyWrapper(bodyStream);

            context.Features.Set(responseBodyWrapper);

            try
            {
                await _next(context);
            }
            finally
            {
                await httpLogging.LogAsync(context, context.RequestAborted);

                await responseBodyWrapper.Body.CopyToAsync(originalBody, context.RequestAborted);

                context.Response.Body = originalBody;

                responseBodyWrapper.Dispose();
            }
        }
Exemple #2
0
        public async Task Invoke(HttpContext context, IHttpLoggingProvider httpLogging)
        {
            await httpLogging.LogAsync(context.Request, context.RequestAborted);

            var originalBody = context.Response.Body;

            var bodyStream = _recyclableMemoryStreamManager.GetStream();

            context.Response.RegisterForDispose(bodyStream);

            context.Response.Body = bodyStream;

            await _next(context);

            await httpLogging.LogAsync(context.Response, bodyStream, context.RequestAborted);

            bodyStream.Position = 0;

            await bodyStream.CopyToAsync(originalBody, context.RequestAborted);

            context.Response.Body = originalBody;
        }