Как правильно настроить пользовательский заголовок в DelegatingHandler? - PullRequest
0 голосов
/ 09 января 2019

Я хочу зарегистрировать идентификатор корреляции вместе со всеми сообщениями журнала. Я использовал 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 не содержит этот заголовок для первого подхода?

1 Ответ

0 голосов
/ 10 января 2019

Я бы сказал, что ваш первый подход - request.Headers.Add. Это легко для модульного тестирования. Честно говоря, любые данные перед запросом идут с HttpRequestMessage.

Для ответа на ваш второй вопрос есть хороший ответ здесь

...