Uri.DnsSafeHost Egenskap
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
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:
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" />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.