Uri.DnsSafeHost Uri.DnsSafeHost Uri.DnsSafeHost Uri.DnsSafeHost Property

定義

DNS の解決に安全に使用できるホスト名を、必要に応じてエスケープを解除してから取得します。Gets a host name that, after being unescaped if necessary, is safe to use for DNS resolution.

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

プロパティ値

String DNS 解決に適した形式の URI のホスト部分を格納している。または、既に解決に適している場合は元のホスト文字列。A String that contains the host part of the URI in a format suitable for DNS resolution; or the original host string, if it is already suitable for resolution.

例外

このインスタンスは相対 URI を表します。このプロパティは、絶対 URI でのみ有効です。This instance represents a relative URI, and this property is valid only for absolute URIs.

次の例ではUri 、文字列からインスタンスを作成します。The following example creates a Uri instance from a string. この例では、からHost返される値の違いを示しています。これは、URI で指定されたホスト名またはアドレスを返し、からDnsSafeHost返された値を返します。これは、DNS 解決で使用するのに安全なアドレスを返します。It illustrates the difference between the value returned from Host, which returns the host name or address specified in the URI, and the value returned from DnsSafeHost, which returns an address that is safe to use in DNS resolution.

// 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.         
    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 'SampleDNSSafeHost

「解説」で説明されているように、解決する前にホスト名を unescape します。As explained in Remarks, unescape the host name before resolving it. UnescapeDataStringメソッドを使用してホスト名を unescape することができ、 GetHostEntryメソッドを呼び出すことによって解決できます。You can use the UnescapeDataString method to unescape the host name, and you can resolve it by calling the GetHostEntry method.

注釈

IPv6 アドレスの場合は、角かっこ ([]) が削除ScopeIdされ、このインスタンスの構築時にプロパティが設定されている場合は、プロパティが設定されます。For IPv6 addresses, the brackets ([]) are removed and the ScopeId property is set, if one was specified when this instance was constructed.

エスケープされた文字列を使用してこのインスタンスを構築し"http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"た場合 (たとえば、)、dnssafehost はエスケープされた文字列を返します。If you used an escaped string to construct this instance (for example, "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"), then DnsSafeHost returns an escaped string. Unescape は、その文字列をDnsSafeHost使用して DNS 解決を行う前に、から返された任意のエスケープ文字列を指定します (例を参照)。Unescape any escaped string returned from DnsSafeHost before using that string for DNS resolution (see the Example). エスケープされていない無効な文字列を使用してこのインスタンスを構築した場合 (たとえば、"http://[fe80:: 200: 39ff: fe36: 1a2d: 1a2d% 4]/temp/example.htm")、DnsSafeHost はエスケープされていない文字列を返します。If you used an invalid unescaped string to construct this instance (for example, "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), then DnsSafeHost returns an unescaped string.

プロパティDnsSafeHostは、このトピックで後述するように、構成設定に依存します。The DnsSafeHost property is dependent on configuration settings, as discussed later in this topic. Windows ストアアプリケーションで構成設定を変更することはできません。を使用DnsSafeHostすると、一貫性のない結果になる可能性があります。Configuration settings cannot be changed by Windows Store applications, which can lead to inconsistent results when using DnsSafeHost. は、現在のapp.config設定がどのようなものでIdnHostあっても、常に DNS セーフであることが保証されるため、を使用DnsSafeHostすることをお勧めします。 IdnHostThe IdnHost property is provided as the preferred alternative to using DnsSafeHost, because IdnHost is guaranteed to always be DNS safe, no matter what the current app.config settings might be.

DnsSafeHostプロパティは .NET Framework v1.0、3.0 sp1、および 2.0 SP1 で拡張されており、RFC 3987 に基づいて国際化リソース識別子 (IRI) のサポートを提供しています。The DnsSafeHost property has been extended in .NET Framework v3.5, 3.0 SP1, and 2.0 SP1 to provide International Resource Identifier (IRI) support based on RFC 3987. 現在のユーザーは、自分で明確に IRI を有効にしない限り、.NET Framework 2.0 の動作からは変更に気付きません。Current users will not see any change from the .NET Framework 2.0 behavior unless they specifically enable IRI. これにより、.NET Framework の以前のバージョンとのアプリケーションの互換性を保証します。This ensures application compatibility with prior versions of the .NET Framework.

IRI のサポートを有効にするには、次の2つの変更が必要です。To enable support for IRI, the following two changes are required:

  1. Machine.config ファイルの .NET Framework 2.0 ディレクトリの下に次の行を追加します。Add the following line to the machine.config file under the .NET Framework 2.0 directory

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

  2. 国際化ドメイン名 (IDN) の解析をドメイン名に適用するかどうか、および IRI 解析規則を適用するかどうかを指定します。Specify whether you want Internationalized Domain Name (IDN) parsing applied to the domain name and whether IRI parsing rules should be applied. これは、machine.configファイルまたは app.config ファイルで行うことができます。This can be done in the machine.config or in the app.config file. たとえば、次のように追加します。For example, add the following:

    <configuration>  
      <uri>  
      <idn enabled="All" />  
      <iriParsing enabled="true" />  
      </uri>  
    </configuration>  
    

IDN を有効にすると、ドメイン名に含まれるすべての Unicode のラベルが Punycode のラベルに変換されます。Enabling IDN will convert all Unicode labels in a domain name to their Punycode equivalents. Punycode 名には ASCII 文字のみが含まれ、常に xn-- プレフィックスで始まります。Punycode names contain only ASCII characters and always start with the xn-- prefix. この理由は、ほとんどの DNS サーバーは ASCII 文字しかサポートしていないため、インターネットで既存の DNS サーバーをサポートするためです (RFC 3940 を参照)。The reason for this is to support existing DNS servers on the Internet, since most DNS servers only support ASCII characters (see RFC 3940).

IDN を有効にすると、 DnsSafeHostプロパティの値にのみ影響します。Enabling IDN only affects the value of the DnsSafeHost property.

IDN には、使用する DNS サーバーに応じて、次の3つの値を指定できます。There are three possible values for IDN depending on the DNS servers that are used:

  • idn enabled = すべてidn enabled = All

    この値は、Unicode のドメイン名があれば、それを等価の Punycode (IDN 名) に変換します。This value will convert any Unicode domain names to their Punycode equivalents (IDN names).

  • idn enabled = AllExceptIntranetidn enabled = AllExceptIntranet

    この値は、すべての外部 Unicode ドメイン名を、等価の Punycode (IDN 名) を使用するように変換します。This value will convert all external Unicode domain names to use the Punycode equivalents (IDN names). このように、ローカルなイントラネットで国際名を処理する場合、このイントラネットで使用する DNS サーバーは Unicode 名をサポートしている必要があります。In this case to handle international names on the local Intranet, the DNS servers that are used for the Intranet should support Unicode names.

  • idn enabled = なしidn enabled = None

    この値は、どの Unicode のドメイン名も、Punycode を使用するように変換しません。This value will not convert any Unicode domain names to use Punycode. これは、.NET Framework 2.0 の動作と一貫性のある既定値です。This is the default value which is consistent with the .NET Framework 2.0 behaviour.

Iri 解析を有効にすると (iriparsing 有効 = true)、RFC 3987 の最新の IRI 規則に従って、正規化と文字チェックが実行されます。Enabling IRI parsing (iriParsing enabled = true) will do normalization and character checking according to the latest IRI rules in RFC 3987. 既定値はfalseで、rfc 2396 および rfc 2732 (IPv6 リテラルの場合) に従って、正規化と文字チェックが実行されます。The default value is false and will do normalization and character checking according to RFC 2396 and RFC 2732 (for IPv6 literals).

IRI サポートの詳細については、 Uriクラスの「解説」を参照してください。For more information on IRI support, see the Remarks section for the Uri class.

適用対象