有没有理由使用System.Uri?

Jon*_*len 5 .net

我正在看它,似乎它从根本上被打破了.

  • 只有5个实例方法没有标记为过时.
  • 似乎没有任何内置方法来解析查询字符串变量.
  • 没有方法可以改变Uri,例如附加一个新的查询变量.
  • HttpUtility适用于字符串,而不是URI

那么有什么好处吗?我真的应该使用这个而不仅仅是字符串吗?

Sco*_*man 8

我不会说Uri课程根本就被打破了.Uri类的目的是提供URI的紧凑和标准表示.Uri类封装了以规范形式返回URI所需的所有逻辑,并提供对IPV4和IPV6符号以及IRI支持的支持.

Uri类的设计不允许在创建Uri后更改它; 如果你想要那种程度的可变性,你应该使用UriBuilder.

使用Uri(或UriBuilder)对字符串的好处是,你可以获得大量的验证,以确保给定的地址格式正确,能够从绝对的地址生成相对URI,等等.基本上,你可以想到一个Uri作为一种实际的数据类型,因此使用一种提供了强大的输入级别.

  • 字符串还提供“URI 的紧凑且标准的表示形式”。真正验证 URI 的唯一方法是调用有问题的资源,因为每个资源往往都有自己的规则。 (2认同)

Jas*_*orn 5

这取决于你在做什么。我可以想到至少一种使用它的场景,那就是将相对 URL 转换为绝对 URL。举例来说,您从某处提取了一些 HTML,但您不一定知道该 URL 是相对的还是绝对的。您可以编写自己的解析逻辑,也可以使用 Uri 类,例如:

Uri link = new Uri(new Uri(webSiteAddress), linkPulledFromSite);
string absoluteUrl = link.AbsoluteUri;
Run Code Online (Sandbox Code Playgroud)

然后您就可以轻松获得绝对 URL,而无需担心。这一切都取决于你在做什么:-)