Uri.DnsSafeHost Egenskap

Definition

Hämtar ett värdnamn som, efter att ha blivit ofrånkomlig vid behov, är säkert att använda för DNS-matchning.

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

Egenskapsvärde

Värddelen av URI:n i ett format som lämpar sig för DNS-matchning. eller den ursprungliga värdsträngen, om den redan är lämplig för upplösning.

Undantag

Den här instansen representerar en relativ URI och den här egenskapen är endast giltig för absoluta URI:er.

Exempel

I följande exempel skapas en Uri instans från en sträng. Den illustrerar skillnaden mellan det värde som returneras från Host, som returnerar värdnamnet eller adressen som anges i URI:n och värdet som returneras från DnsSafeHost, som returnerar en adress som är säker att använda i DNS-matchning.

// 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

Som förklaras i Kommentarer, ta bort värdnamnet innan du löser det. Du kan använda UnescapeDataString metoden för att ta bort värdnamnet och du kan lösa det genom att anropa GetHostEntry metoden.

Kommentarer

För IPv6-adresser tas hakparenteserna ([]) bort och ScopeId egenskapen anges, om en har angetts när den här instansen skapades.

Om du använde en undantagen sträng för att konstruera den här instansen (till exempel "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"), returnerar DnsSafeHost en undantagen sträng. Ta bort en undantagen sträng som returneras från DnsSafeHost innan du använder strängen för DNS-matchning (se exemplet). Om du använde en ogiltig icke kapslade sträng för att konstruera den här instansen (till exempel "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm"), returnerar DnsSafeHost en icke kapslade sträng.

Egenskapen DnsSafeHost är beroende av konfigurationsinställningar i .NET Framework-appar, enligt beskrivningen senare i det här avsnittet. Egenskapen IdnHost tillhandahålls som det föredragna alternativet till att använda DnsSafeHost, eftersom IdnHost garanterat alltid är DNS-säker.

Egenskapen DnsSafeHost utökades i .NET Framework v3.5, 3.0 SP1 och 2.0 SP1 för att tillhandahålla IRI-stöd (International Resource Identifier) baserat på RFC 3987. För att säkerställa programkompatibilitet med tidigare versioner måste du dock specifikt aktivera det i .NET Framework-appar. För att aktivera stöd för IRI krävs följande två ändringar:

  1. Lägg till följande rad i filen machine.config under katalogen .NET Framework 2.0:

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

  2. Ange om du vill att parsning av internationaliserat domännamn (IDN) ska tillämpas på domännamnet och om IRI-parsningsregler ska tillämpas. Detta kan göras i machine.config eller i filenapp.config . Lägg till exempel till följande:

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

Aktivering av IDN konverterar alla Unicode-etiketter i ett domännamn till deras Punycode-motsvarigheter. Punycode-namn innehåller bara ASCII-tecken och börjar alltid med prefixet xn. Anledningen till detta är att stödja befintliga DNS-servrar på Internet, eftersom de flesta DNS-servrar endast stöder ASCII-tecken (se RFC 3940).

Aktivering av IDN påverkar bara värdet för DnsSafeHost egenskapen.

Det finns tre möjliga värden för IDN beroende på vilka DNS-servrar som används:

  • idn aktiverat = Alla

    Det här värdet konverterar alla Unicode-domännamn till deras Punycode-motsvarigheter (IDN-namn).

  • idn aktiverat = AllExceptIntranet

    Det här värdet konverterar alla externa Unicode-domännamn till att använda Punycode-motsvarigheterna (IDN-namn). I det här fallet för att hantera internationella namn på det lokala intranätet bör DE DNS-servrar som används för intranätet ha stöd för Unicode-namn.

  • idn aktiverat = Ingen

    Det här värdet konverterar inte unicode-domännamn till att använda Punycode. Det här är standardvärdet som är konsekvent med beteendet .NET Framework 2.0.

Aktivering av IRI-parsning (iriParsing aktiverat = true) normaliserar och kontrollerar tecken enligt IRI-reglerna i RFC 3987. Standardvärdet är false och normaliserar och kontrollerar tecken enligt RFC 2396 och RFC 2732 (för IPv6-literaler).

Mer information om IRI-stöd finns i avsnittet Anmärkningar för Uri klassen.

Gäller för