diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Tracing/AbpCorrelationIdMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Tracing/AbpCorrelationIdMiddleware.cs index 2e78d9f666..a5f954c260 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Tracing/AbpCorrelationIdMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Tracing/AbpCorrelationIdMiddleware.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Options; using System.Threading.Tasks; @@ -21,9 +22,24 @@ public class AbpCorrelationIdMiddleware : IMiddleware, ITransientDependency public async Task InvokeAsync(HttpContext context, RequestDelegate next) { - var correlationId = _correlationIdProvider.Get(); - CheckAndSetCorrelationIdOnResponse(context, _options, correlationId); - await next(context); + var correlationId = GetCorrelationIdFromRequest(context); + using (_correlationIdProvider.Change(correlationId)) + { + CheckAndSetCorrelationIdOnResponse(context, _options, correlationId); + await next(context); + } + } + + protected virtual string? GetCorrelationIdFromRequest(HttpContext context) + { + var correlationId = context.Request.Headers[_options.HttpHeaderName]; + if (correlationId.IsNullOrEmpty()) + { + correlationId = Guid.NewGuid().ToString("N"); + context.Request.Headers[_options.HttpHeaderName] = correlationId; + } + + return correlationId; } protected virtual void CheckAndSetCorrelationIdOnResponse(