mirror of
https://github.com/nsnail/Ocelot.git
synced 2025-04-22 06:42:50 +08:00
Fix request id middleware
This commit is contained in:
parent
da922c0e04
commit
8b93f44077
@ -72,7 +72,7 @@ namespace Ocelot.Middleware
|
|||||||
builder.UseRateLimiting();
|
builder.UseRateLimiting();
|
||||||
|
|
||||||
// Now we can look for the requestId
|
// Now we can look for the requestId
|
||||||
builder.UseRequestIdMiddleware(); //obsolete?
|
builder.UseRequestIdMiddleware();
|
||||||
|
|
||||||
// Allow pre authentication logic. The idea being people might want to run something custom before what is built in.
|
// Allow pre authentication logic. The idea being people might want to run something custom before what is built in.
|
||||||
builder.UseIfNotNull(middlewareConfiguration.PreAuthenticationMiddleware);
|
builder.UseIfNotNull(middlewareConfiguration.PreAuthenticationMiddleware);
|
||||||
|
@ -41,34 +41,40 @@ namespace Ocelot.RequestId.Middleware
|
|||||||
|
|
||||||
private void SetOcelotRequestId(HttpContext context)
|
private void SetOcelotRequestId(HttpContext context)
|
||||||
{
|
{
|
||||||
var key = DefaultRequestIdKey.Value;
|
// if get request ID is set on upstream request then retrieve it
|
||||||
|
var key = DownstreamRoute.ReRoute.RequestIdKey ?? DefaultRequestIdKey.Value;
|
||||||
|
|
||||||
if (DownstreamRoute.ReRoute.RequestIdKey != null)
|
StringValues upstreamRequestIds;
|
||||||
|
if (context.Request.Headers.TryGetValue(key, out upstreamRequestIds))
|
||||||
{
|
{
|
||||||
key = DownstreamRoute.ReRoute.RequestIdKey;
|
context.TraceIdentifier = upstreamRequestIds.First();
|
||||||
}
|
}
|
||||||
|
|
||||||
StringValues requestIds;
|
// set request ID on downstream request, if required
|
||||||
|
var requestId = new RequestId(DownstreamRoute?.ReRoute?.RequestIdKey, context.TraceIdentifier);
|
||||||
|
|
||||||
if (context.Request.Headers.TryGetValue(key, out requestIds))
|
if (ShouldAddRequestId(requestId, DownstreamRequest.Headers))
|
||||||
{
|
{
|
||||||
var requestId = requestIds.First();
|
AddRequestIdHeader(requestId, DownstreamRequest);
|
||||||
var downstreamRequestHeaders = DownstreamRequest.Headers;
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(requestId) &&
|
private bool ShouldAddRequestId(RequestId requestId, HttpRequestHeaders headers)
|
||||||
!HeaderExists(key, downstreamRequestHeaders))
|
|
||||||
{
|
{
|
||||||
downstreamRequestHeaders.Add(key, requestId);
|
return !string.IsNullOrEmpty(requestId?.RequestIdKey)
|
||||||
|
&& !string.IsNullOrEmpty(requestId.RequestIdValue)
|
||||||
|
&& !RequestIdInHeaders(requestId, headers);
|
||||||
}
|
}
|
||||||
|
|
||||||
context.TraceIdentifier = requestId;
|
private bool RequestIdInHeaders(RequestId requestId, HttpRequestHeaders headers)
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool HeaderExists(string headerKey, HttpRequestHeaders headers)
|
|
||||||
{
|
{
|
||||||
IEnumerable<string> value;
|
IEnumerable<string> value;
|
||||||
return headers.TryGetValues(headerKey, out value);
|
return headers.TryGetValues(requestId.RequestIdKey, out value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddRequestIdHeader(RequestId requestId, HttpRequestMessage httpRequestMessage)
|
||||||
|
{
|
||||||
|
httpRequestMessage.Headers.Add(requestId.RequestIdKey, requestId.RequestIdValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user