Asp.Net Core 中间件记录Http请求内容和响应
///
/// 记录请求响应中间件
///
public class RequestResponseLogMiddleware
{
private readonly RequestDelegate _next;
///
/// 构造函数
///
///
public RequestResponseLogMiddleware(RequestDelegate next)
{
_next = next;
}
///
/// 中间件处理
///
///
///
///
public async Task InvokeAsync(HttpContext context, IRepository repo)
{
// 启用缓冲
context.Request.EnableBuffering();
#region Request
var request = context.Request;
// var controllerActionDescriptor = context.GetEndpoint().metadata.Getmetadata();
// var controllerName = controllerActionDescriptor.ControllerName;
// var actionName = controllerActionDescriptor.ActionName;
var url = request.Path.Value + request.QueryString.Value;
if (request.Routevalues.Count == 0) return;
var stream = request.Body;
stream.Seek(0, SeekOrigin.Begin);
var bytes = new byte[request.ContentLength.Value];
stream.Read(bytes, 0, bytes.Length);
log.RequestBody = Encoding.UTF8.GetString(bytes);
stream.Seek(0, SeekOrigin.Begin);
#endregion
#region Response
var originalBodyStream = context.Response.Body;
using (var responseBody = new MemoryStream())
{
context.Response.Body = responseBody;
await _next(context);
responseBody.Seek(0, SeekOrigin.Begin);
string responseBody = await new StreamReader(responseBody).ReadToEndAsync();
responseBody.Seek(0, SeekOrigin.Begin);
await responseBody.CopyToAsync(originalBodyStream);
}
#endregion
}
}
public void Configure(IApplicationBuilder app)
{
// 省略内容
app.UseMiddleware();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}