requestIdMiddleware function
Middleware that attaches a unique X-Request-Id header to every
request/response pair.
If the incoming request already carries an X-Request-Id header that
value is propagated; otherwise a new random ID is generated.
Pipeline()
.addMiddleware(requestIdMiddleware())
.addHandler(router.handler)
The request ID is stored in request.context['requestId'] so downstream
handlers can read it for logging or tracing.
Implementation
Middleware requestIdMiddleware({
/// Override the header name. Defaults to `X-Request-Id`.
String headerName = 'X-Request-Id',
}) {
return (Handler inner) {
return (Request request) async {
final id = request.headers[headerName] ?? _generateId();
final updatedRequest = request.change(
context: {...request.context, 'requestId': id},
);
final response = await inner(updatedRequest);
return response.change(
headers: {
...response.headersAll.map((k, v) => MapEntry(k, v.join(','))),
headerName: id,
},
);
};
};
}