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

Definición

Obtiene un nombre de host que, una vez convertido en nombre de host sin escape en caso necesario, se puede usar de forma segura para la resolución 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

Valor de propiedad

@No__t-0 que contiene la parte del host del URI en un formato adecuado para la resolución DNS; o la cadena de host original, si ya es adecuada para la resolución.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.

Excepciones

Esta instancia representa un identificador URI relativo, y esta propiedad sólo es válida para identificadores URI absolutos.This instance represents a relative URI, and this property is valid only for absolute URIs.

Ejemplos

En el ejemplo siguiente se crea una instancia de Uri a partir de una cadena.The following example creates a Uri instance from a string. Muestra la diferencia entre el valor devuelto de Host, que devuelve el nombre de host o la dirección especificada en el URI, y el valor devuelto de DnsSafeHost, que devuelve una dirección que se utiliza de forma segura en la resolución de 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

Como se explica en la sección Comentarios, desescape el nombre de host antes de resolverlo.As explained in Remarks, unescape the host name before resolving it. Puede usar el método UnescapeDataString para deshacer el nombre de host y resolverlo llamando al método GetHostEntry.You can use the UnescapeDataString method to unescape the host name, and you can resolve it by calling the GetHostEntry method.

Comentarios

En el caso de las direcciones IPv6, se quitan los corchetes ([]) y se establece la propiedad ScopeId, si se especificó uno cuando se construyó esta instancia.For IPv6 addresses, the brackets ([]) are removed and the ScopeId property is set, if one was specified when this instance was constructed.

Si usó una cadena de escape para construir esta instancia (por ejemplo, "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"), DnsSafeHost devuelve una cadena de escape.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. Desescape cualquier cadena de escape devuelta desde DnsSafeHost antes de usar esa cadena para la resolución DNS (vea el ejemplo).Unescape any escaped string returned from DnsSafeHost before using that string for DNS resolution (see the Example). Si usó una cadena sin escape no válida para construir esta instancia (por ejemplo, "http://[fe80:: 200:39ff: fe36:1a2d% 4]/Temp/example.htm"), DnsSafeHost devuelve una cadena sin escape.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.

La propiedad DnsSafeHost depende de los valores de configuración, como se describe más adelante en este tema.The DnsSafeHost property is dependent on configuration settings, as discussed later in this topic. Las aplicaciones de la tienda Windows no pueden cambiar los valores de configuración, lo que puede provocar resultados incoherentes cuando se usa DnsSafeHost.Configuration settings cannot be changed by Windows Store applications, which can lead to inconsistent results when using DnsSafeHost. La propiedad IdnHost se proporciona como la alternativa preferida al uso de DnsSafeHost, ya que se garantiza que @no__t 2 es siempre seguro para DNS, independientemente de cuál sea la configuración de app. config actual.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.

La propiedad DnsSafeHost se ha ampliado en .NET Framework v 3.5, 3,0 SP1 y 2,0 SP1 para proporcionar compatibilidad con el identificador de recursos internacionales (IRI) basado en 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. Los usuarios actuales no percibirán ningún cambio respecto al comportamiento de .NET Framework 2.0, a menos que habiliten IRI específicamente.Current users will not see any change from the .NET Framework 2.0 behavior unless they specifically enable IRI. Esto garantiza la compatibilidad de las aplicaciones con versiones anteriores de .NET Framework.This ensures application compatibility with prior versions of the .NET Framework.

Para habilitar la compatibilidad con IRI, se necesitan los dos cambios siguientes:To enable support for IRI, the following two changes are required:

  1. Agregue la siguiente línea al archivo Machine. config en el directorio .NET Framework 2,0Add 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. Especifique si desea que se aplique el análisis de nombres de dominio internacionalizados (IDN) al nombre de dominio y si se deben aplicar reglas de análisis de IRI.Specify whether you want Internationalized Domain Name (IDN) parsing applied to the domain name and whether IRI parsing rules should be applied. Esto puede hacerse en Machine. config o en el archivo app. config .This can be done in the machine.config or in the app.config file. Por ejemplo, agregue lo siguiente:For example, add the following:

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

La activación de IDN convertirá todas la etiquetas Unicode de un nombre de dominio en sus equivalentes de Punycode.Enabling IDN will convert all Unicode labels in a domain name to their Punycode equivalents. Los nombres de Punycode solo contienen caracteres ASCII y siempre empiezan con el prefijo xn--.Punycode names contain only ASCII characters and always start with the xn-- prefix. De este modo, se admiten los servidores DNS existentes en Internet, ya que la mayoría de los servidores DNS solo admite caracteres ASCII (vea 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).

Habilitar IDN solo afecta al valor de la propiedad DnsSafeHost.Enabling IDN only affects the value of the DnsSafeHost property.

Hay tres valores posibles para IDN en función de los servidores DNS que se usan:There are three possible values for IDN depending on the DNS servers that are used:

  • IDN habilitado = Allidn enabled = All

    Este valor convierte cualquier nombre de dominio Unicode a su equivalente Punycode (nombres IDN).This value will convert any Unicode domain names to their Punycode equivalents (IDN names).

  • IDN habilitado = AllExceptIntranetidn enabled = AllExceptIntranet

    Este valor convertirá todos los nombres de dominio Unicode externos para que se utilicen sus equivalentes Punycode (nombres IDN).This value will convert all external Unicode domain names to use the Punycode equivalents (IDN names). En este caso, para administrar los nombres internacionales en la intranet local, los servidores DNS que se utilizan para la intranet deben admitir los nombres 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 habilitado = ningunoidn enabled = None

    Este valor no convierte ningún nombre de dominio Unicode para que se use Punycode.This value will not convert any Unicode domain names to use Punycode. Este es el valor predeterminado, que es coherente con el comportamiento de .NET Framework 2,0.This is the default value which is consistent with the .NET Framework 2.0 behaviour.

Al habilitar el análisis de IRI (Análisisiri Enabled = true), se realizará la normalización y la comprobación de caracteres según las reglas de IRI más recientes en RFC 3987.Enabling IRI parsing (iriParsing enabled = true) will do normalization and character checking according to the latest IRI rules in RFC 3987. El valor predeterminado es false y realizará la normalización y la comprobación de caracteres según RFC 2396 y RFC 2732 (para los literales de IPv6).The default value is false and will do normalization and character checking according to RFC 2396 and RFC 2732 (for IPv6 literals).

Para obtener más información sobre la compatibilidad con IRI, consulte la sección Comentarios de la clase Uri.For more information on IRI support, see the Remarks section for the Uri class.

Se aplica a