51 lines
1.5 KiB
C#
51 lines
1.5 KiB
C#
using System.Text;
|
|
|
|
namespace Alchegos.MCP.Middleware
|
|
{
|
|
|
|
public class RequestBodyLoggingMiddleware
|
|
{
|
|
private readonly RequestDelegate _next;
|
|
private readonly ILogger _logger;
|
|
public RequestBodyLoggingMiddleware(RequestDelegate next, ILogger<RequestBodyLoggingMiddleware> logger)
|
|
{
|
|
_next = next;
|
|
_logger = logger;
|
|
}
|
|
|
|
public async Task InvokeAsync(HttpContext context)
|
|
{
|
|
if (context.Request.Method == HttpMethods.Post && context.Request.ContentLength > 0)
|
|
{
|
|
context.Request.EnableBuffering();
|
|
|
|
using var reader = new StreamReader(
|
|
context.Request.Body,
|
|
encoding: Encoding.UTF8,
|
|
detectEncodingFromByteOrderMarks: false,
|
|
bufferSize: 4096,
|
|
leaveOpen: true);
|
|
|
|
var requestBody = await reader.ReadToEndAsync();
|
|
context.Request.Body.Position = 0;
|
|
|
|
_logger.LogTrace("Request Body (POST {RequestPath}):\n{RequestBody}", context.Request.Path, requestBody);
|
|
|
|
}
|
|
|
|
await _next(context);
|
|
}
|
|
}
|
|
}
|
|
|
|
namespace Microsoft.AspNetCore.Builder
|
|
{
|
|
public static class RequestBodyLoggingMiddlewareExtensions
|
|
{
|
|
public static IApplicationBuilder UseRequestBodyLogging(
|
|
this IApplicationBuilder builder)
|
|
{
|
|
return builder.UseMiddleware<Alchegos.MCP.Middleware.RequestBodyLoggingMiddleware>();
|
|
}
|
|
}
|
|
} |