从 HttpClient 请求中删除 TraceParent 标头

问题描述 投票:0回答:2

当我使用

HttpClient
发送任何请求时,它会自动将标头
TraceParent
附加到请求标头。我尝试清除所有默认请求标头,但这没有什么区别。

c# http-headers
2个回答
3
投票
由 DiagnosticsHandler 指定的

标头

traceparent
Request-Id
https://github.com/dotnet/runtime/blob/release/5.0/src/libraries/System.Net.Http/src/System/Net/Http/ DiagnosticsHandler.cs#L286

此处描述了如何禁用此行为:https://github.com/dotnet/aspnetcore/issues/21012#issuecomment-616570453

ASP.NET Core 默认创建一个代表请求的 Activity。这就是告诉 HttpClient 发送传出请求 id 标头的内容。您可以通过多种方式禁用它:

  • 在发出请求之前将当前活动设置为 null (Activity.Current = null)
  • 通过将环境变量 DOTNET_SYSTEM_NET_HTTP_ENABLEACTIVITYPROPAGATION 设置为“false”或“0”。
  • 通过 AppContext 将 System.Net.Http.EnableActivityPropagation 切换为 false

0
投票

这个答案已经有所改变。

SocketsHttpHandler
类可以直接用来代替
HttpClientHandler
。它有一个属性
ActivityHeadersPropagator
允许禁用这些标头。

它的使用方式与原始版本大致相同,尽管存在一些细微的差异。例如,下面是我需要为 mTLS 握手添加证书的地方,并且还可以选择绕过代理。

GitHub 上的这个问题也描述了解决方案, https://github.com/dotnet/runtime/issues/109558

//Old code
//var httpClientHandler = new HttpClientHandler();
//httpClientHandler.ClientCertificates.Add(x509);
//httpClientHandler.ClientCertificates.UseProxy(!bypassProxy);

//New code replacing the above. SocketsHttpHandler instance can directly replace HttpClientHandler instance
var socketsHttpHandler = new SocketsHttpHandler
{
    ActivityHeadersPropagator = null,
    SslOptions = new System.Net.Security.SslClientAuthenticationOptions
    {
        ClientCertificates = new X509CertificateCollection { x509 }
    },
    UseProxy = !bypassProxy
};
© www.soinside.com 2019 - 2024. All rights reserved.