Я хочу зарегистрировать идентификатор корреляции вместе со всеми сообщениями журнала.
Я использовал DelegatingHandler для добавления идентификатора корреляции в заголовки запроса и ответа, для которых я натолкнулся на два подхода:
Первый:
// In the DelagatingHandler
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
...
request.Headers.Add("X-Correlation-Id", correlationId);
...
}
Чтобы получить этот заголовок в классе регистратора, мне пришлось сделать следующее (HttpContext.Current.Request.Headers не содержал этот заголовок) :
var requestMessage = HttpContext.Current.Items["MS_HttpRequestMessage"] as HttpRequestMessage;
var corId = requestMessage.Headers.GetValues("X-Correlation-Id");
Второе:
// In the DelegatingHandler
HttpContext.Current.Request.Headers.Add("X-Correlation-Id", correlationId);
// In the logger class
var correlationId = HttpContext.Current.Request.Headers.Get("X-Correlation-Id");
Какой подход правильный?
Почему HttpContext.Current.Request не содержит этот заголовок для первого подхода?