Compartilhar via


Uri.DnsSafeHost Propriedade

Definição

Obtém um nome do host que, depois de não ser escapada, se necessário, é seguro para ser usado para a resolução de DNS.

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

Valor da propriedade

String

A parte de host do URI em um formato adequado para resolução DNS; ou a cadeia de caracteres de host original, se ela já estiver adequada para resolução.

Exceções

Esta instância representa uma URL relativa, e esta propriedade só é válida para URIs absolutos.

Exemplos

O exemplo a seguir cria uma Uri instância de uma cadeia de caracteres. Ele ilustra a diferença entre o valor retornado, Hostque retorna o nome do host ou o endereço especificado no URI e o valor retornado, DnsSafeHostque retorna um endereço seguro para ser usado na resolução 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

Conforme explicado no Remarks, remova o nome do host antes de resolvê-lo. Você pode usar o UnescapeDataString método para desescasar o nome do host e resolvê-lo chamando o GetHostEntry método.

Comentários

Para endereços IPv6, os colchetes ([]) são removidos e a ScopeId propriedade é definida, se uma foi especificada quando essa instância foi construída.

Se você usou uma cadeia de caracteres de escape para construir essa instância (por exemplo), "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"o DnsSafeHost retornará uma cadeia de caracteres de escape. Desescasar qualquer cadeia de caracteres de escape retornada antes de DnsSafeHost usar essa cadeia de caracteres para resolução DNS (consulte o Exemplo). Se você usou uma cadeia de caracteres sem escape inválida para construir essa instância (por exemplo, "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), o DnsSafeHost retornará uma cadeia de caracteres sem escape.

A DnsSafeHost propriedade depende das configurações em .NET Framework aplicativos, conforme discutido posteriormente neste tópico. A IdnHost propriedade é fornecida como a alternativa preferencial ao uso DnsSafeHost, pois IdnHost tem a garantia de sempre ser DNS seguro.

A DnsSafeHost propriedade foi estendida em .NET Framework v3.5, 3.0 SP1 e 2.0 SP1 para fornecer suporte ao IRI (International Resource Identifier) com base no RFC 3987. No entanto, para garantir a compatibilidade do aplicativo com versões anteriores, você deve habilitá-lo especificamente em aplicativos .NET Framework. Para habilitar o suporte para IRI, as duas alterações a seguir são necessárias:

  1. Adicione a seguinte linha ao arquivo machine.config no diretório .NET Framework 2.0:

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

  2. Especifique se deseja que a análise de IDN (Nome de Domínio Internacionalizado) seja aplicada ao nome de domínio e se as regras de análise de IRI devem ser aplicadas. Isso pode ser feito no machine.config ou no arquivo app.config . Por exemplo, adicione o seguinte:

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

Habilitar o IDN converte todos os rótulos Unicode em um nome de domínio em seus equivalentes punycode. Os nomes Punycode contêm apenas caracteres ASCII e sempre começam com o prefixo xn--. A razão para isso é dar suporte a servidores DNS existentes na Internet, pois a maioria dos servidores DNS dá suporte somente a caracteres ASCII (consulte RFC 3940).

Habilitar o IDN afeta apenas o valor da DnsSafeHost propriedade.

Há três valores possíveis para IDN, dependendo dos servidores DNS que são usados:

  • idn habilitado = Todos

    Esse valor converterá todos os nomes de domínio Unicode em seus equivalentes do Punycode (nomes IDN).

  • idn habilitado = AllExceptIntranet

    Esse valor converterá todos os nomes de domínio Unicode externos para usar os equivalentes do Punycode (nomes IDN). Nesse caso, para manipular nomes internacionais na Intranet local, os servidores DNS usados para a Intranet devem dar suporte a nomes Unicode.

  • idn habilitado = Nenhum

    Esse valor não converterá nenhum nome de domínio Unicode para usar o Punycode. Esse é o valor padrão, que é consistente com o comportamento .NET Framework 2.0.

Habilitar a análise de IRI (iriParsing habilitado = true) normaliza e verifica caracteres de acordo com as regras de IRI no RFC 3987. O valor padrão é false e normaliza e verifica caracteres de acordo com RFC 2396 e RFC 2732 (para literais IPv6).

Para obter mais informações sobre o suporte IRI, consulte a seção Comentários da classe Uri.

Aplica-se a