using Serilog.Context; namespace WebApi.Middleware; public class RequestIdMiddleware { private readonly RequestDelegate _next; public RequestIdMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context) { var requestId = context.Request.Headers["X-Request-ID"].FirstOrDefault() ?? Guid.NewGuid().ToString("N"); context.Items["RequestId"] = requestId; using (LogContext.PushProperty("RequestId", requestId)) { await _next(context); } } } public static class RequestIdExtensions { public static string? GetRequestId(this HttpContext context) { return context.Items["RequestId"] as string; } public static IApplicationBuilder UseRequestId(this IApplicationBuilder builder) { return builder.UseMiddleware(); } }