Uri.DnsSafeHost 屬性

定義

取得在視需要取消逸出後,可放心用於 DNS 解析的主機名稱。

public:
 property System::String ^ DnsSafeHost { System::String ^ get(); };
public string DnsSafeHost { get; }
member this.DnsSafeHost : string
Public ReadOnly Property DnsSafeHost As String

屬性值

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 的支援,需要下列兩項變更:

  1. 將下列這一行新增至 .NET Framework 2.0 目錄下的 machine.config 檔案:

    \<section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

  2. 指定是否要將國際化功能變數名稱 (IDN) 套用至功能變數名稱的剖析,以及是否應套用 IRI 剖析規則。 這可以在 machine.configapp.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 一節。

適用於