28 lines
1.0 KiB
C#
28 lines
1.0 KiB
C#
// Copyright (c) .NET Foundation. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
using System.Threading;
|
|
|
|
namespace Microsoft.AspNetCore.Http
|
|
{
|
|
public class HttpContextAccessor : IHttpContextAccessor
|
|
{
|
|
private static AsyncLocal<(string traceIdentifier, HttpContext context)> _httpContextCurrent = new AsyncLocal<(string traceIdentifier, HttpContext context)>();
|
|
|
|
public HttpContext HttpContext
|
|
{
|
|
get
|
|
{
|
|
var value = _httpContextCurrent.Value;
|
|
// Only return the context if the stored request id matches the stored trace identifier
|
|
// context.TraceIdentifier is cleared by HttpContextFactory.Dispose.
|
|
return value.traceIdentifier == value.context?.TraceIdentifier ? value.context : null;
|
|
}
|
|
set
|
|
{
|
|
_httpContextCurrent.Value = (value?.TraceIdentifier, value);
|
|
}
|
|
}
|
|
}
|
|
}
|