Uri.DnsSafeHost Propriedade
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Recebe um nome de host que, depois de ser libertado se necessário, é seguro para usar na 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 de Propriedade
A parte host do URI num formato adequado para resolução DNS; ou a cadeia original de host, se já for adequada para resolução.
Exceções
Esta instância representa um URI relativo, e esta propriedade é válida apenas para URIs absolutos.
Exemplos
O exemplo seguinte cria uma Uri instância a partir de uma cadeia. Ilustra a diferença entre o valor devolvido de Host, que devolve o nome do anfitrião ou endereço especificado no URI, e o valor devolvido de DnsSafeHost, que devolve 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
Como explicado em Observações, desfaça o nome do hospedeiro antes de o resolver. Podes usar o UnescapeDataString método para desbloquear o nome do host, e podes resolvê-lo chamando o GetHostEntry método.
Observações
Para endereços IPv6, os colchetes ([]) são removidos e a ScopeId propriedade é definida, caso tenha sido especificada quando esta instância foi construída.
Se usou uma cadeia escapada para construir esta instância (por exemplo, "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"), então o DnsSafeHost devolve uma cadeia escapada. Desescape qualquer string escapada retornada de DnsSafeHost antes usando essa string para resolução DNS (ver o Exemplo). Se usaste uma cadeia inválida sem saída para construir esta instância (por exemplo, "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), então o DnsSafeHost devolve uma cadeia não escapada.
A propriedade DnsSafeHost depende das definições de configuração em .NET aplicações Framework, como discutido mais adiante neste tópico. A IdnHost propriedade é fornecida como alternativa preferida ao uso DnsSafeHostde , porque IdnHost é garantida que é sempre segura para o DNS.
A propriedade DnsSafeHost foi estendida no .NET Framework v3.5, 3.0 SP1 e 2.0 SP1 para fornecer suporte ao International Resource Identifier (IRI) com base no RFC 3987. No entanto, para garantir a compatibilidade da aplicação com versões anteriores, deve ativar especificamente esta aplicação nas aplicações .NET Framework. Para permitir o suporte ao IRI, são necessárias as seguintes duas alterações:
Adicione a seguinte linha ao ficheiro 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" />Especifique se quer que seja aplicada a análise sintática de Nome de Domínio Internacionalizado (IDN) ao nome de domínio e se devem ser aplicadas regras de análise IRI. Isto pode ser feito no machine.config ou no ficheiroapp.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 para seus equivalentes Punycode. Os nomes Punycode contêm apenas caracteres ASCII e sempre começam com o prefixo xn-. A razão para isso é suportar servidores DNS existentes na Internet, uma vez que a maioria dos servidores DNS suporta apenas caracteres ASCII (consulte RFC 3940).
Ativar o IDN afeta apenas o valor da DnsSafeHost propriedade.
Há três valores possíveis para IDN, dependendo dos servidores DNS usados:
IDN ativado = Todos
Este valor converterá quaisquer nomes de domínio Unicode para os seus equivalentes Punycode (nomes IDN).
idn ativado = AllExceptIntranet
Este valor converte todos os nomes de domínio Unicode externos para usar os equivalentes Punycode (nomes IDN). Neste caso, para lidar com nomes internacionais na Intranet local, os servidores DNS usados para a Intranet devem suportar nomes Unicode.
idn ativado = Não
Este valor não converte quaisquer nomes de domínio Unicode para usar Punycode. Este é o valor padrão, que é consistente com o comportamento do .NET Framework 2.0.
Ativar a análise sintática IRI (iriParsing ativado = true) normaliza e verifica os caracteres de acordo com as regras IRI no RFC 3987. O valor padrão é false e normaliza e verifica os caracteres de acordo com o RFC 2396 e o RFC 2732 (para os literais IPv6).
Para mais informações sobre o apoio ao IRI, consulte a secção de Observações da Uri disciplina.