在 .NET 9 中,EventSource 和 HttpClient(SocketsHttpHandler 名称:EventSource)发出的 System.Net.Http 事件的默认行为已修改,以清除 URI 的查询和片段部分。 此更改通过防止记录查询字符串中包含的潜在敏感信息,同时将修订的性能成本保持在最低水平,从而增强隐私。 如有必要,可以重写此行为。
引入的版本
.NET 9 预览版 7
旧行为
以前,由 HttpClient 和 SocketsHttpHandler 包含的查询字符串信息发出的事件,这可能会无意中公开敏感信息。
新行为
随着 dotnet/runtime#104741的变化,默认情况下,查询和片段部分会在 * 和 HttpClient 事件中被 SocketsHttpHandler 字符替换。 此更改会影响特定事件和参数,例如 pathAndQuery 中的 RequestStart 和 redirectUri中的 Redirect。
中断性变更的类型
此更改为行为更改。
更改原因
此更改的主要原因是通过降低无意中记录敏感信息的风险来增强隐私。 查询字符串通常包含敏感数据,并默认从日志中对其进行修订有助于保护此信息。 为了保持实现简单高效,片段部分也被删除了。
建议的操作
如果在使用 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 查询修订。