Uri.DnsSafeHost Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém um nome de host que, depois de não ser possível, se necessário, é seguro de usar para resolução 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
A parte de host do URI em um formato adequado para resolução DNS; ou a cadeia de caracteres de host original, se já estiver adequada para resolução.
Exceções
Essa instância representa um URI relativo e essa propriedade é válida apenas para URIs absolutas.
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 usar na resolução DNS.
// 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 em Comentários, não esconda 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 com 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 com escape. Não escape de qualquer cadeia de caracteres escapada retornada antes de usar essa cadeia de DnsSafeHost 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"), dnsSafeHost retornará uma cadeia de caracteres sem escape.
A DnsSafeHost propriedade depende das configurações em aplicativos do .NET Framework, conforme discutido posteriormente neste tópico. A IdnHost propriedade é fornecida como a alternativa preferencial ao uso DnsSafeHost, pois IdnHost é garantido que sempre seja DNS seguro.
A DnsSafeHost propriedade foi estendida no .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 do .NET Framework. Para habilitar o suporte para IRI, as duas alterações a seguir são necessárias:
Adicione a seguinte linha ao arquivo machine.config no diretório do .NET Framework 2.0:
\<section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />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--. O motivo para isso é dar suporte a servidores DNS existentes na Internet, já que a maioria dos servidores DNS dá suporte apenas a caracteres ASCII (consulte RFC 3940).
A habilitação do 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 punycode (nomes IDN).
idn habilitado = AllExceptIntranet
Esse valor converterá todos os nomes de domínio Unicode externos para usar os equivalentes de Punycode (nomes IDN). Nesse caso, para lidar com 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 Punycode. Esse é o valor padrão, que é consistente com o comportamento do .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 normalizar e verificar caracteres de acordo com RFC 2396 e RFC 2732 (para literais IPv6).
Para obter mais informações sobre o suporte a IRI, consulte a seção Comentários da Uri classe.