URI 是您的應用程式在內部網路或網際網路上可以使用的資源壓縮表示。Uri 類別定義用來處理 URI 的屬性和方法,包括剖析、比較和組合。Uri 類別屬性是唯讀的,若要建立可修改的物件,請使用 UriBuilder 類別。
相對 URI (例如,"/new/index.htm") 必須根據基底 URI 展開,才能成為絕對的 URI。提供 MakeRelative 方法,以便在必要時將絕對 URI 轉換成相對 URI。
如果字串是語式正確的 URI,包括配置識別項,則 Uri 建構函式不會逸出 URI 字串。
Uri 屬性會以逸出編碼方式傳回標準資料表示,其中所有大於 127 的 Unicode 值的字元都會取代成對等的十六進位字元。為了讓 URI 具有標準格式,Uri 建構函式會執行下列步驟:
將 URI 配置轉換成小寫。
將主機名稱轉換成小寫。
如果主機名稱是 IPv6 位址,則會使用標準 IPv6 位址,並移除 ScopeId 和其他選擇性 IPv6 資料。
移除預設的和空的連接埠編號。
壓縮序列,例如 /./、/../、//,包括逸出表示,以規範化階層式 URI 的路徑。請注意,部分配置不會壓縮其逸出表示。
對於階層式 URI,如果主機結尾不是斜線 (/),則會加上斜線。
依照 RFC 2396,逸出 URI 中的任何保留字元。
逸出表示因為屬於某些配置之建構函式 (Constructor) 規範化的一部分,所以可以進行壓縮。URI 會壓縮逸出序列的配置包括下列項目:file、http、https、net.pipe 和 net.tcp。至於其他所有配置,則不會壓縮逸出序列。例如:如果您以百分比將兩點 ".." 編碼為 "%2E%2E",則 URI 建構函式會針對部分配置壓縮這個序列。例如,下列程式碼範例顯示 http 配置的 URI 建構函式。
Uri uri = new Uri("http://myUrl/%2E%2E/%2E%2E");
Console.WriteLine(uri.AbsoluteUri);
Console.WriteLine(uri.PathAndQuery);
執行這個程式碼時,會傳回下列已壓縮逸出序列的輸出。
下列程式碼範例顯示 ftp 配置的 URI 建構函式:
Uri uri = new Uri("ftp://myUrl/%2E%2E/%2E%2E");
Console.WriteLine(uri.AbsoluteUri);
Console.WriteLine(uri.PathAndQuery);
執行這個程式碼時,會傳回下列未壓縮逸出序列的輸出。
ftp://myUrl/%2E%2E/%2E%2E
/%2E%2E/%2E%2E
您可以使用 ToString 方法,將 Uri 類別的內容從採取逸出編碼的 URI 參考,轉換成可以讀取的 URI 參考。請注意,在 ToString 方法的輸出中,仍會逸出部分保留字元。這是為了支援從 ToString 傳回值非模稜兩可地重新建構 URI。
有些 URI 包括片段識別項、查詢或兩者。片段識別項是數字符號 (#) 後面的任何文字 (不含數字符號),而片段文字會儲存於 Fragment 屬性中。查詢資訊就是 URI 中問號 (?) 之後的所有文字,查循文字則儲存在 Query 屬性中。
在 .NET Framework 1.1 中,如果指定給建構函式的字串包含未知的配置和 "c:\",則 Uri 類別會在冒號後面插入 "//"。例如,URI xyz:c:\abc 會轉換成 xyz://c:/abc。在 .NET Framework 2.0 中,這個行為已移除,以上的範例字串會轉換成 xyz:c:/abc。
注意事項: |
|---|
URI 類別支援採行 IPv4 通訊協定的四個數字標記法和 IPv6 通訊協定的冒號分隔十六進位標記法的 IP 位址用法。請記得要將 IPv6 位址置於方括弧之內,如 http://[::1]。 |
國際資源識別項支援
效能考量
如果您使用包含 URI 的 Web.config 檔初始化應用程式,而 URI 的配置識別項非標準時,處理 URI 會需要額外時間。在這個狀況下,當需要 URI 時,而不是啟動時,請初始化應用程式受影響的組件。
呼叫者注意事項
基於安全考量,應用程式在接受來自未受信任來源的 Uri 執行個體時應該要特別小心,並且將 dontEscape 設定為 true。您可以呼叫 IsWellFormedOriginalString 方法來檢查 URI 字串的有效性。
Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows CE 平台注意事項:
.NET Compact Framework 不會分辨相對和絕對路徑。此外,在處理以 file:// 為字首的 URI 字串配置時,.NET Compact Framework 的作法與完整版 .NET Framework 是不同的。它會將相對的 file://myfile 規格解析成 \\myfile。使用 file:///myfile (三條斜線) 會在根目錄中解析為 \myfile。為了相關作業能順利執行,請指定絕對路徑資訊。
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360
.NET Framework 和 .NET Compact Framework 並不支援各種平台的所有版本。如需支援平台版本的相關資訊,請參閱 .NET Framework 系統需求。