Uri.DnsSafeHost 屬性
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
取得在視需要取消逸出後,可放心用於 DNS 解析的主機名稱。
public:
property System::String ^ DnsSafeHost { System::String ^ get(); };
public string DnsSafeHost { get; }
member this.DnsSafeHost : string
Public ReadOnly Property DnsSafeHost As String
屬性值
URI 的主機部分,格式適用于 DNS 解析;如果原始主機字串已經適合解析,則為 。
例外狀況
這個執行個體代表相對的 URI,而這個屬性只適用於絕對 URI。
範例
下列範例會 Uri 從字串建立 實例。 它說明從 Host 傳回的值之間的差異,這個值會傳回 URI 中指定的主機名稱或位址,以及從 DnsSafeHost 傳回的值,其會傳回安全用於 DNS 解析的位址。
// Create new Uri using a string address.
Uri^ address = gcnew Uri( "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm" );
// Make the address DNS safe.
// The following outputs "[fe80::200:39ff:fe36:1a2d]".
Console::WriteLine( address->Host );
// The following outputs "fe80::200:39ff:fe36:1a2d%254".
Console::WriteLine( address->DnsSafeHost );
// Create new Uri using a string address.
Uri address = new Uri("http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm");
// Make the address DNS safe.
// The following outputs "[fe80::200:39ff:fe36:1a2d]".
Console.WriteLine(address.Host);
// The following outputs "fe80::200:39ff:fe36:1a2d%254".
Console.WriteLine(address.DnsSafeHost);
// Create new Uri using a string address.
let address = Uri "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"
// Make the address DNS safe.
// The following outputs "[fe80::200:39ff:fe36:1a2d]".
printfn $"{address.Host}"
// The following outputs "fe80::200:39ff:fe36:1a2d%254".
printfn $"{address.DnsSafeHost}"
' Create new Uri using a string address.
Dim address As New Uri("http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm")
' Make the address DNS safe.
' The following outputs "[fe80::200:39ff:fe36:1a2d]".
Console.WriteLine(address.Host)
' The following outputs "fe80::200:39ff:fe36:1a2d%254".
Console.WriteLine(address.DnsSafeHost)
End Sub
如中所述,在解析主機名稱之前先取消逸出主機名稱。 您可以使用 UnescapeDataString 方法來取消逸出主機名稱,並呼叫 方法來解析它 GetHostEntry 。
備註
若為 IPv6 位址,則會移除 ScopeId 方括弧 ([]) ,而且如果建構此實例時已指定屬性,則會設定屬性。
如果您使用逸出字串來建構此實例 (例如 "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"
,) ,則 DnsSafeHost 會傳回逸出字串。 請先取消逸出任何從 DnsSafeHost
傳回的逸出字串,再使用該字串進行 DNS 解析 (請參閱範例) 。 如果您使用不正確未逸出字串來建構此實例 (,例如「HTTP://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm」) ,則 DnsSafeHost 會傳回未逸出的字串。
屬性 DnsSafeHost 相依于.NET Framework應用程式中的組態設定,如本主題稍後所述。 屬性 IdnHost 會以慣用的 DnsSafeHost 替代方式提供,因為 IdnHost 保證一律為 DNS 安全。
屬性 DnsSafeHost 已擴充在 .NET Framework v3.5、3.0 SP1 和 2.0 SP1 中,以提供以 RFC 3987 為基礎的國際資源識別碼 (IRI) 支援。 不過,若要確保應用程式與舊版的應用程式相容性,您必須在.NET Framework應用程式中特別啟用它。 若要啟用 IRI 的支援,需要下列兩項變更:
將下列這一行新增至 .NET Framework 2.0 目錄下的 machine.config 檔案:
\<section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
指定是否要將國際化功能變數名稱 (IDN) 套用至功能變數名稱的剖析,以及是否應套用 IRI 剖析規則。 這可以在 machine.config 或 app.config 檔案中完成。 例如,新增下列專案:
<configuration> <uri> <idn enabled="All" /> <iriParsing enabled="true" /> </uri> </configuration>
啟用 IDN 會將功能變數名稱中的所有 Unicode 標籤轉換為其 Punycode 對等專案。 Punycode 名稱只包含 ASCII 字元,而且開頭一律為前置詞 xn--。 這是為了支援網際網路上現有的 DNS 伺服器,因為大部分的 DNS 伺服器僅支援 ASCII 字元 (請參閱 RFC 3940)。
啟用 IDN 只會影響 屬性的值 DnsSafeHost 。
IDN 有三個可能的值,視所使用的 DNS 伺服器而定:
idn enabled = All
這個值會將任何 Unicode 網域名稱轉換成 Punycode 的對等名稱 (IDN 名稱)。
idn enabled = AllExceptIntranet
這個值會將所有外部 Unicode 網域名稱轉換成使用 Punycode 的對等名稱 (IDN 名稱)。 此例中,若要在近端內部網路上處理國際性名稱,則用於內部網路的 DNS 伺服器應該支援 Unicode 名稱。
idn enabled = None
這個值不會轉換任何 Unicode 網域名稱即可使用 Punycode。 這是預設值,與 .NET Framework 2.0 行為一致。
啟用 IRI 剖析 (已啟用 iriParsing = true
) 會根據 RFC 3987 中的 IRI 規則正規化和檢查字元。 預設值為 false
,並根據 RFC 2396 和 RFC 2732 (,針對 IPv6 常值) 正規化和檢查字元。
如需 IRI 支援的詳細資訊,請參閱 類別的 Uri 一節。