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

プロパティ値

AString解像度に適している場合は、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

「解説」ように、それを解決する前に、ホスト名にエスケープ解除します。As explained in Remarks, unescape the host name before resolving it. 使用することができます、UnescapeDataStringして、ホスト名をエスケープ解除するメソッドを呼び出すことによって解決できる、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. 返される任意のエスケープ文字列をエスケープ解除DnsSafeHostDNS 解決のためにその文字列を使用する前に (例を参照してください)。Unescape any escaped string returned from DnsSafeHost before using that string for DNS resolution (see the Example). (たとえば、"http://[fe80::200:39ff:fe36: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. IdnHostプロパティを使用する推奨される代替手段として用意されてDnsSafeHostため、IdnHostは常に DNS がどのような現在に関係なく、安全な保証app.config設定があります。The 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 v3.5、3.0 SP1 では、プロパティが拡張され、2.0 SP1 International Resource Identifier (IRI) を提供するサポートに基づいて RFC 3987 します。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 を有効になっている = Allidn enabled = All

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

  • idn を有効になっている AllExceptIntranet を =idn 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 を有効になっている = なし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.

適用対象