在 Unix 上正确分析包含非 ASCII 字符的 URI 路径

修复了 System.Uri 类中的一个 bug,以便在 Unix 平台上正确解析包含非 ASCII 字符的绝对 URI 路径。

更改描述

在早期版本的 .NET 中,包含非 ASCII 字符的绝对 URI 路径在 Unix 平台上被错误地分析,并且路径段重复。 (绝对路径是以“/”开头的路径)。.NET 5 已修复分析问题。 如果从旧版 .NET 迁移到 .NET 5 或更高版本,你将获得由Uri.AbsoluteUriUri.ToString()其他Uri成员生成的不同值。

在 Unix 上运行时,请考虑以下代码的输出。

var myUri = new Uri("/üri");

Console.WriteLine($"AbsoluteUri: {myUri.AbsoluteUri}");
Console.WriteLine($"ToString: {myUri.ToString()}");

上一个 .NET 版本的输出:

AbsoluteUri: /%C3%BCri/%C3%BCri
ToString: /üri/üri

.NET 5 或更高版本上的输出:

AbsoluteUri: /%C3%BCri
ToString: /üri

已引入的版本

5.0

如果你具有需要和说明重复路径段的代码,则可以删除该代码。

受影响的 API