mirror of https://github.com/abpframework/abp.git
13 changed files with 77 additions and 0 deletions
@ -0,0 +1,58 @@ |
|||||
|
using Microsoft.AspNetCore.Http; |
||||
|
using Microsoft.Extensions.Options; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.Tracing; |
||||
|
|
||||
|
namespace Volo.Abp.AspNetCore.Tracing |
||||
|
{ |
||||
|
public class AbpCorrelationIdMiddleware |
||||
|
{ |
||||
|
private readonly RequestDelegate _next; |
||||
|
|
||||
|
public AbpCorrelationIdMiddleware(RequestDelegate next) |
||||
|
{ |
||||
|
_next = next; |
||||
|
} |
||||
|
|
||||
|
public async Task Invoke( |
||||
|
HttpContext httpContext, |
||||
|
IOptions<CorrelationIdOptions> options, |
||||
|
ICorrelationIdProvider correlationIdProvider) |
||||
|
{ |
||||
|
var correlationId = correlationIdProvider.Get(); |
||||
|
var optionsValue = options.Value; |
||||
|
|
||||
|
try |
||||
|
{ |
||||
|
await _next(httpContext); |
||||
|
} |
||||
|
finally |
||||
|
{ |
||||
|
CheckAndSetCorrelationIdOnResponse(httpContext, optionsValue, correlationId); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
protected virtual void CheckAndSetCorrelationIdOnResponse( |
||||
|
HttpContext httpContext, |
||||
|
CorrelationIdOptions options, |
||||
|
string correlationId) |
||||
|
{ |
||||
|
if (httpContext.Response.HasStarted) |
||||
|
{ |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
if (!options.SetResponseHeader) |
||||
|
{ |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
if (httpContext.Response.Headers.ContainsKey(options.HttpHeaderName)) |
||||
|
{ |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
httpContext.Response.Headers[options.HttpHeaderName] = correlationId; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue