Files
Alchegos.MCP/Middleware/RequestBodyLoggingMiddleware.cs
2025-05-04 19:11:12 +01:00

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>();
}
}
}