using Microsoft.AspNetCore.Http; namespace Core.Cerberos.Adapters.Extensions { public sealed class TrackingMechanismExtension : DelegatingHandler { private readonly IHttpContextAccessor _httpContextAccessor; public TrackingMechanismExtension(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor ?? throw new ArgumentNullException(nameof(httpContextAccessor)); } protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { if (_httpContextAccessor.HttpContext.Items.TryGetValue("TrackingId", out var trackingId)) { request.Headers.Add("TrackingId", trackingId.ToString()); } return await base.SendAsync(request, cancellationToken).ConfigureAwait(false); } } }