Спасибо @ Александр,
После ваших комментариев я снова просмотрел свой код и обнаружил, что эта проблема не вызвана await base.SendAsync (), Infact Я вызывал внутренние методы с помощью async, что разрушило HttpContext.Current.
Для справки ниже приведена моя реализация DelegatingHandler. Перед этим я определил два метода, то есть IncommingMessageAsync (), OutgoingMessageAsync как Async. Теперь я изменил это на простые методы. Потому что я не хочу Task в этих методах.
public class MessageHandler : DelegatingHandler
{
private static NLog.Logger logger;
HttpContext context;
public MessageHandler()
{
logger = NLog.LogManager.GetCurrentClassLogger();
}
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var correlationID = $"{DateTime.Now.Ticks}{Thread.CurrentThread.ManagedThreadId}";
context = HttpContext.Current;
context.Items["correlationID"] = correlationID; //used in Nlog aspnet-item:variable=correlationID
IncommingMessageAsync(request);
var response = await base.SendAsync(request, cancellationToken);
context.Items["responseTime"] = DateTime.Now;
HttpContext.Current = context;
OutgoingMessageAsync(response);
return response;
}
protected void IncommingMessageAsync(HttpRequestMessage request)
{
logger.Info("Request Received from {URL}", request.Method + " " + request.RequestUri);
}
protected void OutgoingMessageAsync(HttpResponseMessage response)
{
if (response.IsSuccessStatusCode)
{
logger.Info("Resposne Returned with Status {Status}", response.StatusCode);
}
else
{
logger.Warn("Resposne Returned with Status {Status}", response.StatusCode);
}
}
}