我正在看它,它似乎是從根本上打破。是否有任何理由使用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