.net core BeginRequest EndRequest code example

Example: .net core BeginRequest EndRequest

//ref https://www.pluralsight.com/tech-blog/converting-http-modules-to-middleware/
//ref https://stackoverflow.com/questions/43403941/how-to-read-asp-net-core-response-body

app.UseMiddleware();
app.UseMiddleware();

public async Task InvokeAsync(HttpContext context, IApplicationLog log)
{
  _session.Id=Guid.NewGuid().ToString();
  if (context.Request.Path.Value.Contains("api"))
  {
    log.SaveRqst(new { Header = context.Request.Headers, Data = context.Request.Body.ReadToEnd() }, context.Request.Path);
  }
  await _next(context);
}

 public async Task InvokeAsync(HttpContext context, IApplicationLog log)
 {
   //await _next(context);
   //log.SaveRsp(new { Header = context.Response.Headers, Data = context.Response.Body.ReadToEnd()}, context.Response.StatusCode.ToString(), context.Request.Path);

   Stream originalBody = context.Response.Body;

   try
   {
     using (var memStream = new MemoryStream())
     {
       context.Response.Body = memStream;
       await _next(context);

       memStream.Position = 0;
       string responseBody = new StreamReader(memStream).ReadToEnd();
       if (context.Request.Path.Value.Contains("api"))
       {
         log.SaveRsp(new { Header = context.Response.Headers, Data = responseBody }, context.Response.StatusCode.ToString(), context.Request.Path);
       }

       memStream.Position = 0;
       await memStream.CopyToAsync(originalBody);
     }

   }
   finally
   {
     context.Response.Body = originalBody;
   }
 }

Tags:

Misc Example