Sdílet prostřednictvím


Uri.DnsSafeHost Vlastnost

Definice

Získá název hostitele, který po zrušení v případě potřeby je bezpečné použít pro překlad DNS.

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

Hodnota vlastnosti

Hostitelská část identifikátoru URI ve formátu vhodném pro překlad DNS; nebo původní řetězec hostitele, pokud je již vhodný pro rozlišení.

Výjimky

Tato instance představuje relativní identifikátor URI a tato vlastnost je platná pouze pro absolutní identifikátory URI.

Příklady

Následující příklad vytvoří Uri instanci z řetězce. Ukazuje rozdíl mezi hodnotou vrácenou Hostz , která vrátí název hostitele nebo adresu zadanou v identifikátoru URI a hodnotu vrácenou z DnsSafeHost, která vrací adresu, která je bezpečná pro použití v překladu 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

Jak je vysvětleno v poznámkách, zrušte před překladem název hostitele. Tuto metodu UnescapeDataString můžete použít k uvolnění názvu hostitele a můžete ji vyřešit voláním GetHostEntry metody.

Poznámky

U adres IPv6 jsou závorky ([]) odebrány a ScopeId vlastnost je nastavena, pokud byla zadána při vytváření této instance.

Pokud jste k vytvoření této instance použili řídicí řetězec (například "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"), vrátí DnsSafeHost řídicí řetězec. Unescape any escaped string return from DnsSafeHost before using that string for DNS resolution (see the Example). Pokud jste použili neplatný unescaped řetězec k vytvoření této instance (například "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), pak DnsSafeHost vrátí unescaped řetězec.

Vlastnost DnsSafeHost závisí na nastavení konfigurace v aplikacích .NET Framework, jak je popsáno dále v tomto tématu. Vlastnost IdnHost je poskytována jako upřednostňovaná alternativa k použití DnsSafeHost, protože IdnHost je zaručeno, že vždy být v bezpečí DNS.

Vlastnost DnsSafeHost byla rozšířena v rozhraní .NET Framework v3.5, 3.0 SP1 a 2.0 SP1 tak, aby poskytovala podporu mezinárodního identifikátoru prostředků (IRI) na základě RFC 3987. Pokud ale chcete zajistit kompatibilitu aplikací s předchozími verzemi, musíte ji výslovně povolit v aplikacích .NET Framework. Aby bylo možné povolit podporu pro IRI, jsou vyžadovány následující dvě změny:

  1. Do souboru machine.config v adresáři rozhraní .NET Framework 2.0 přidejte následující řádek:

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

  2. Určete, jestli chcete, aby se na název domény použila analýza IDN (Internationalized Domain Name) a jestli se mají použít pravidla analýzy IRI. To lze provést v machine.config nebo v souboruapp.config . Přidejte například následující:

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

Povolením IDN se všechny Unicode popisky v názvu domény převedou na jejich Punycode ekvivalenty. Názvy v Punycode obsahují pouze znaky ASCII a vždy začínají prefixem xn--. Důvodem je podpora stávajících serverů DNS na internetu, protože většina serverů DNS podporuje pouze znaky ASCII (viz RFC 3940).

Povolení IDN má vliv pouze na hodnotu DnsSafeHost vlastnosti.

Existují tři možné hodnoty pro IDN v závislosti na používaných serverech DNS:

  • idn povoleno = vše

    Tato hodnota převede všechny názvy domén Unicode na jejich ekvivalenty punycode (názvy IDN).

  • idn povolené = VšechnoMimoIntranet

    Tato hodnota převede všechny externí názvy domén Unicode tak, aby používaly ekvivalenty punycode (názvy IDN). V tomto případě pro zpracování mezinárodních názvů v místním intranetu by servery DNS používané pro intranet měly podporovat názvy Unicode.

  • povoleno idn = Žádný

    Tato hodnota nepřevedne žádné názvy domén Unicode tak, aby používaly Punycode. Toto je výchozí hodnota, která je konzistentní s chováním rozhraní .NET Framework 2.0.

Povolení parsování IRI (iriParsing enabled = true) normalizuje a kontroluje znaky podle pravidel IRI v RFC 3987. Výchozí hodnota je false a normalizuje a kontroluje znaky podle RFC 2396 a RFC 2732 (pro literály IPv6).

Další informace o podpoře IRI naleznete v části Poznámky pro Uri třídu.

Platí pro