using System.Text; namespace Alchegos.MCP.Middleware { public class RequestBodyLoggingMiddleware { private readonly RequestDelegate _next; private readonly ILogger _logger; public RequestBodyLoggingMiddleware(RequestDelegate next, ILogger 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(); } } }