标头
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
这个答案已经有所改变。
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
};