from starlette.middleware.base import BaseHTTPMiddleware from starlette.requests import Request from uuid import uuid4 class RequestContextMiddleware(BaseHTTPMiddleware): async def dispatch(self, request: Request, call_next): request.state.request_id = request.headers.get("X-Request-Id") or uuid4().hex response = await call_next(request) response.headers["X-Request-Id"] = request.state.request_id return response