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(); } }
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; }