在 .NET 9 中,HttpClient 和 SocketsHttpHandler(EventSource
名称:System.Net.Http
)发出的 EventSource 事件的默认行为已修改,以清除 URI 的查询和片段部分。 此更改通过防止记录查询字符串中包含的潜在敏感信息,同时将修订的性能成本保持在最低水平,从而增强隐私。 如有必要,可以重写此行为。
引入的版本
.NET 9 预览版 7
旧行为
以前,由 HttpClient
和 SocketsHttpHandler
包含的查询字符串信息发出的事件,这可能会无意中公开敏感信息。
新行为
随着 dotnet/runtime#104741的变化,默认情况下,查询和片段部分会在 HttpClient
和 SocketsHttpHandler
事件中被 *
字符替换。 此更改会影响特定事件和参数,例如 RequestStart
中的 pathAndQuery
和 Redirect
中的 redirectUri
。
中断性变更的类型
此更改为行为更改。
更改原因
此更改的主要原因是通过降低无意中记录敏感信息的风险来增强隐私。 查询字符串通常包含敏感数据,并默认从日志中对其进行修订有助于保护此信息。 为了保持实现简单高效,片段部分也被删除了。
建议的操作
如果在使用 HttpClient
或 SocketsHttpHandler
事件时需要查询字符串信息,并且确信这样做是安全的,可以通过以下三种方式之一设置 AppContext 开关来全局启用查询字符串日志记录:
在项目文件中。
<ItemGroup> <RuntimeHostConfigurationOption Include="System.Net.Http.DisableUriRedaction" Value="true" /> </ItemGroup>
在 runtimeconfig.json 文件中。
{ "runtimeOptions": { "configProperties": { "System.Net.Http.DisableUriRedaction": true } } }
通过环境变量。
将
DOTNET_SYSTEM_NET_HTTP_DISABLEURIREDACTION
设置为true
或 1。
否则,无需执行任何操作,默认行为将有助于增强应用程序的隐私方面。
注意
此开关还会禁用默认 IHttpClientFactory
日志中的查询字符串修订。 有关详细信息,请参阅 IHttpClientFactory 日志中的 URI 查询修订。