Files
imprink/src/Imprink.WebApi/Middleware/RequestTimingMiddleware.cs
2025-06-09 20:28:21 +03:00

37 lines
1.1 KiB
C#

using System.Diagnostics;
namespace Imprink.WebApi.Middleware;
public class RequestTimingMiddleware(RequestDelegate next, ILogger<RequestTimingMiddleware> logger)
{
public async Task InvokeAsync(HttpContext context)
{
var stopwatch = Stopwatch.StartNew();
try
{
await next(context);
}
finally
{
stopwatch.Stop();
var elapsedMs = stopwatch.ElapsedMilliseconds;
var method = context.Request.Method;
var path = context.Request.Path;
var statusCode = context.Response.StatusCode;
logger.LogInformation(
"Request {Method} {Path} completed in {ElapsedMs}ms with status code {StatusCode}",
method, path, elapsedMs, statusCode);
}
}
}
public static class RequestTimingMiddlewareExtensions
{
public static IApplicationBuilder UseRequestTiming(this IApplicationBuilder builder)
{
return builder.UseMiddleware<RequestTimingMiddleware>();
}
}