Uri.DnsSafeHost Propiedad

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.

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

String

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.

Excepciones

Esta instancia representa un identificador URI relativo, y esta propiedad sólo es válida para identificadores URI absolutos.

Ejemplos

En el ejemplo siguiente se crea una Uri instancia a partir de una cadena. Ilustra 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 es segura para usar en la resolución 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

Como se explica en Comentarios, quite el nombre de host antes de resolverlo. Puede usar el método para anular el UnescapeDataString escape del nombre de host y puede resolverlo llamando al GetHostEntry método .

Comentarios

En el caso de las direcciones IPv6, se quitan los corchetes ([]) y se establece la ScopeId propiedad , si se especificó una cuando se construyó esta instancia.

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. Unescape cualquier cadena de escape devuelta desde antes de DnsSafeHost usar esa cadena para la resolución DNS (consulte el ejemplo). Si usó una cadena no válida sin escape para construir esta instancia (por ejemplo, "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), DnsSafeHost devuelve una cadena sin escape.

La DnsSafeHost propiedad depende de las opciones de configuración de las aplicaciones de .NET Framework, como se describe más adelante en este tema. La IdnHost propiedad se proporciona como alternativa preferida al uso DnsSafeHostde , ya que IdnHost se garantiza que siempre es seguro dns.

La DnsSafeHost propiedad se extendió en .NET Framework v3.5, 3.0 SP1 y 2.0 SP1 para proporcionar compatibilidad con el identificador de recursos internacional (IRI) basado en RFC 3987. Sin embargo, para garantizar la compatibilidad de aplicaciones con versiones anteriores, debe habilitarla específicamente en aplicaciones de .NET Framework. Para habilitar la compatibilidad con IRI, se requieren los dos cambios siguientes:

  1. Agregue la siguiente línea al archivo machine.config en el directorio .NET Framework 2.0:

    \<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. Esto se puede hacer en el machine.config o en el archivo app.config . Por ejemplo, agregue lo siguiente:

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

Al habilitar IDN, todas las etiquetas Unicode de un nombre de dominio se convierten en sus equivalentes de Punycode. Los nombres de Punycode solo contienen caracteres ASCII y siempre empiezan con el prefijo xn--. 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).

Habilitar IDN solo afecta al valor de la DnsSafeHost propiedad .

Hay tres valores posibles para IDN en función de los servidores DNS que se usan:

  • idn enabled = All

    Este valor convierte cualquier nombre de dominio Unicode a su equivalente Punycode (nombres IDN).

  • idn enabled = AllExceptIntranet

    Este valor convertirá todos los nombres de dominio Unicode externos para que se utilicen sus equivalentes Punycode (nombres IDN). 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.

  • idn enabled = None

    Este valor no convierte ningún nombre de dominio Unicode para que se use Punycode. Este es el valor predeterminado, que es coherente con el comportamiento de .NET Framework 2.0.

Al habilitar el análisis de IRI (iriParsing habilitado = true) se normalizan y comprueban los caracteres según las reglas de IRI de RFC 3987. El valor predeterminado es false y normaliza y comprueba los caracteres según RFC 2396 y RFC 2732 (para literales IPv6).

Para obtener más información sobre la compatibilidad con IRI, vea la sección Comentarios de la Uri clase .

Se aplica a