public async Task Invoke(HttpContext context, IApiRequestLogger logger) { await logger.PushRequestAsync(context); var originalBodyStream = context.Response.Body; try { using (var tempResponseBody = new MemoryStream()) { context.Response.Body = tempResponseBody; await _next(context); await logger.PushResponseAsync(context, tempResponseBody); await tempResponseBody.CopyToAsync(originalBodyStream); } } finally { context.Response.Body = originalBodyStream; logger.LogCompletedRequest(); } }