How is HttpContext TraceIdentifier generated in .NET Core?

16,704

Solution 1

Kestrel generates the request ID as {ConnectionId}:{Request number}. The connection id is the base32 encoded version of a long using the alphabet 1-9, and A - V. The request count is the number of requests over that connection. The nth request over a specific connection is {ConnectionId}:{n}

https://github.com/aspnet/KestrelHttpServer/blob/a48222378b8249a26b093b5b835001c7c7b45815/src/Kestrel.Core/Internal/Infrastructure/CorrelationIdGenerator.cs

https://github.com/aspnet/KestrelHttpServer/blob/0aff4a0440c2f393c0b98e9046a8e66e30a56cb0/src/Kestrel.Core/Internal/Http/Http1Connection.cs#L446

Solution 2

It is DateTime.UtcNow.Ticks base32 encoded.

https://github.com/aspnet/HttpAbstractions/blob/87cd79d6fc54bb4abf07c1e380cd7a9498a78612/src/Microsoft.AspNetCore.Http/Features/HttpRequestIdentifierFeature.cs

Share:
16,704

Related videos on Youtube

DarthVader
Author by

DarthVader

Updated on September 21, 2020

Comments

  • DarthVader
    DarthVader over 3 years

    How is HttpContext TraceIdentifier (aka Correlation-Id) generated?

    I request a page through controller which gives me the following TraceId: 0HLEACIU86PT6:0000000D

    The page fires an ajax call which has the following TraceId: 0HLEACIU86PT7:00000005

    As you can see, they are very similar. Is it based on time?

    Why didn't I get the same TraceIdentifier?

    How can I ensure the same TraceIdentifier?

    • Brad
      Brad almost 6 years
      The page request and the AJAX request are two separate requests therefore different TraceId.
  • davidfowl
    davidfowl almost 6 years
    This implementation isn't used in Kestrel.
  • Konrad
    Konrad almost 6 years
    And how ConnectionId is generated?
  • davidfowl
    davidfowl almost 6 years
  • Dave Black
    Dave Black over 4 years
    @davidfowl is there a way to override how Kestrel generates the CorrelationId? I'd like to have it always use a GUID.
  • Kiran B
    Kiran B almost 3 years
    Hi @DaveBlack The HttpContext.TraceIdentifier has get and set defined, So you can overwrite this in a middleware docs.microsoft.com/en-us/dotnet/api/…