我正在看它,它似乎是从根本上打破。是否有任何理由使用System.Uri?
- 只有5个实例方法没有被标记为过时。
- 虽然目前没有出现任何内置的方式来 解析查询字符串变量。
- 有没有方法来突变开放的,例如追加一个新的查询变量。
- HttpUtility适用于字符串,而不是URI的
那么还有什么是好?我真的应该使用它而不是仅仅是字符串吗?
我正在看它,它似乎是从根本上打破。是否有任何理由使用System.Uri?
那么还有什么是好?我真的应该使用它而不是仅仅是字符串吗?
UriBuilder是突变。 HttpUtility也很好理解(例如查询字符串解析)。
http://msdn.microsoft.com/en-us/library/system.uribuilder.aspx
http://msdn.microsoft.com/en-us/library/system.web.httputility.parsequerystring.aspx
我不会说Uri类在所有从根本上打破。 Uri类的目的是提供一个URI的紧凑和标准的表示。 Uri类封装了以规范形式返回URI所需的所有逻辑,并提供对IPV4和IPV6符号以及IRI支持的支持。
Uri类的目的不是允许在Uri创建后更改;如果你想要这种可变性,你应该使用UriBuilder代替。
在字符串上使用Uri(或UriBuilder)的好处是,您可以获得大量验证内容,以确保给定的地址格式正确,能够从绝对地址生成相对URI等。实质上,您可以将Uri看作是一种实际的数据类型,因此使用它可以提供一种强类型的级别。
一个字符串也提供了一个“紧凑和标准的URI表示”。真正验证URI的唯一方法是调用有问题的资源,因为每个资源都有自己的规则。 – 2008-10-19 01:59:32
这取决于你在做什么。我至少可以考虑一个我将使用它的场景,也就是将相对URL转换为绝对值。比如说,你有一些HTML你已经拉到某个地方,但你不一定知道URL是相对的还是绝对的。你可以写你自己的分析逻辑,或者你可以使用Uri类,如:
Uri link = new Uri(new Uri(webSiteAddress), linkPulledFromSite);
string absoluteUrl = link.AbsoluteUri;
那么你会很容易有没有担心的绝对URL。这一切只是取决于你在做什么:-)
为什么所有的文件类和web类采取未验证的字符串? .NET框架设计师真的把这个球放在字符串封装类上。
如果您担心字符串数据的验证,几乎所有的字符串都应该放入某种容器中。没有人确定你的字符串的状态是非常困难的。它如何格式化?它是否包含无效字符?现在启动它可以吗?
我很清楚HttpUtility的,但它适用于字符串不是URI的。 – 2008-10-19 01:18:25
但这就是关键。您可以使用它与Uri.Query解析查询字符串。 – 2008-10-21 14:22:01