Diese Dokumentation wurde archiviert und wird nicht länger gepflegt.

Uri-Klasse

Aktualisiert: November 2007

Stellt eine Objektdarstellung eines URIs (Uniform Resource Identifier) und einfachen Zugriff auf die Teile des URIs bereit.

Namespace:  System
Assembly:  System (in System.dll)

[SerializableAttribute]
[TypeConverterAttribute(typeof(UriTypeConverter))]
public class Uri : ISerializable
/** @attribute SerializableAttribute */ 
/** @attribute TypeConverterAttribute(UriTypeConverter) */
public class Uri implements ISerializable
public class Uri implements ISerializable

Ein URI ist eine kompakte Darstellung einer Ressource, die einer Anwendung im Intranet oder im Internet zur Verfügung steht. Die Uri-Klasse definiert die Eigenschaften und Methoden zur Behandlung von URIs. Dazu gehören Analysieren, Vergleichen und Verbinden. Die Eigenschaften der Uri-Klasse sind schreibgeschützt. Ein Objekt, das geändert werden kann, erstellen Sie mithilfe der UriBuilder-Klasse.

Relative URIs (z. B. "/new/index.htm") müssen in Bezug auf ein Basis-URI erweitert werden, damit sie absolut werden. Die MakeRelative-Methode steht zur Verfügung, um bei Bedarf absolute URIs in relative URIs zu konvertieren.

Die Uri-Konstruktoren versehen eine URI-Zeichenfolge nicht mit Escapezeichen, wenn die Zeichenfolge des URIs einschließlich Schemabezeichner formal korrekt ist.

Die Uri-Eigenschaften geben eine kanonische Darstellung der Daten mit Escapecodierung zurück, wobei alle Zeichen mit Unicode-Werten über 127 durch ihre hexadezimale Entsprechung ersetzt werden. Zum Überführen eines URIs in kanonische Form führt der Uri-Konstruktor folgende Schritte durch:

  • Das URI-Schema wird in Kleinbuchstaben konvertiert.

  • Konvertiert den Hostnamen in Kleinschreibung.

  • Wenn der Hostname eine IPv6-Adresse ist, wird die kanonische IPv6-Adresse verwendet. ScopeID und andere optionale IPv6-Daten werden entfernt.

  • Standardanschlussnummern und leere Anschlussnummern werden entfernt.

  • Kanonisiert den Pfad für hierarchische URIs, indem Sequenzen wie /./, /../, //, einschließlich mit Escapezeichen versehener Darstellungen, komprimiert werden. Beachten Sie, dass für einige Schemas die mit Escapezeichen versehenen Darstellungen nicht komprimiert werden.

  • Wenn der Host für hierarchische URIs nicht mit einem Schrägstrich (/) endet, wird dieser hinzugefügt.

  • Alle reservierte Zeichen im URI werden in Übereinstimmung mit RFC 2396 mit Escapezeichen versehen.

Im Rahmen der Kanonisierung im Konstruktor für einige Schemas werden mit Escapezeichen versehene Darstellungen komprimiert. Zu den Schemas, für die der URI-Konstruktor mit Escapezeichen versehene Sequenzen komprimiert, zählen Folgende: file, http, https, net.pipe und net.tcp. Für alle anderen Schemas werden mit Escapezeichen versehene Sequenzen nicht komprimiert. Wenn Sie beispielsweise die beiden Punkte ".." mit dem Prozentsymbol als "%2E%2E" codieren, komprimiert der URI-Konstruktor diese Sequenz für einige Schemas. Im folgenden Beispiel wird ein URI-Konstruktor für das http-Schema veranschaulicht.


    Uri uri = new Uri("http://myUrl/%2E%2E/%2E%2E");
    Console.WriteLine(uri.AbsoluteUri);
    Console.WriteLine(uri.PathAndQuery);

Bei Ausführung dieses Codes wird die folgende Ausgabe erhalten, in der die mit Escapezeichen versehene Sequenz komprimiert ist.


http://myUrl/
/

Im folgenden Codebeispiel wird ein URI-Konstruktor für das ftp-Schema veranschaulicht.


    Uri uri = new Uri("ftp://myUrl/%2E%2E/%2E%2E");
    Console.WriteLine(uri.AbsoluteUri);
    Console.WriteLine(uri.PathAndQuery);

Bei Ausführung dieses Codes wird die folgende Ausgabe erhalten, in der die mit Escapezeichen versehene Sequenz nicht komprimiert ist.


ftp://myUrl/%2E%2E/%2E%2E
/%2E%2E/%2E%2E

Der Inhalt der Uri-Klasse kann mit der ToString-Methode von einem Verweis auf einen mit Escapezeichen codierten URI in einen Verweis auf einen lesbaren URI umgewandelt werden. Beachten Sie, dass einige reservierte Zeichen in der Ausgabe der ToString-Methode immer noch mit Escapezeichen versehen sein können. Auf diese Weise wird die unmissverständliche Rekonstruktion eines URIs des Werts unterstützt, der von ToString zurückgegeben wird.

Einige URIs schließen einen Fragmentbezeichner oder eine Abfrage oder beides ein. Bei einem Fragmentbezeichner handelt es sich um Text, der einem Nummernzeichen (#) folgt, ohne das Nummernzeichen einzuschließen. Der Fragmenttext wird in der Fragment-Eigenschaft gespeichert. Bei Abfrageinformationen handelt es sich um Text, der im URI auf ein Fragezeichen (?) folgt. Der Abfragetext wird in der Query-Eigenschaft gespeichert.

In .NET Framework, Version 1.1, fügt die Uri-Klasse nach dem Doppelpunkt "//" ein, wenn die für einen Konstruktor angegebene Zeichenfolge ein unbekanntes Schema und "c:\" enthält. Zum Beispiel wird der URI xyz:c:\abc in xyz://c:/abc konvertiert. In .NET Framework, Version 2.0, wurde dieses Verhalten entfernt, und die Beispielzeichenfolge wird in xyz:c:/abc konvertiert.

txt7706a.alert_note(de-de,VS.90).gifHinweis:

Die URI-Klasse unterstützt bei der Verwendung von IP-Adressen sowohl die Quadschreibweise für IPv4 als auch die Hexadezimalschreibweise für IPv6. IPv6-Adressen müssen in eckigen Klammern angegeben werden, z. B. http://[::1].

IRI-Unterstützung (International Resource Identifier)

Webadressen werden typischerweise mit URIs (Uniform Resource Identifiers) ausgedrückt, die aus einem stark einschränkten Zeichensatz bestehen:

  • ASCII-Groß- und Kleinbuchstaben des englischen Alphabets.

  • Ziffern von 0 bis 9.

  • Eine kleine Anzahl anderer ASCII-Symbole.

Die Spezifikationen für URIs sind in RFC 2396 und RFC 3986 dokumentiert, die von der IETF (Internet Engineering Task Force) veröffentlicht wurden.

Mit dem stetigen Anwachsen des Internets müssen Ressourcen zunehmend auch in anderen Sprachen als Englisch angegeben werden. Bezeichner, die dieser Anforderung gerecht werden und Nicht-ASCII-Zeichen (Zeichen im Unicode/ISO 10646-Zeichensatz) zulassen, sind IRIs (International Resource Identifiers). Die Spezifikationen für IRIs sind in RFC 3987 dokumentiert, die von der IETF veröffentlicht wurde. Wenn IRIs verwendet werden, kann eine URL auch Unicode-Zeichen enthalten.

Die vorhandene Uri-Klasse wurde nun in .NET Framework v3.5, 3.0 SP1, und 2.0 SP1 erweitert, sodass sie nun IRI-Bezeichner gemäß RFC 3987 unterstützt. Aktuelle Benutzer stellen keinen Unterschied zum .NET Framework 2.0-Verhalten fest, es sei denn, sie aktivieren IRI explizit. Damit wird die Anwendungskompatibilität mit früheren Versionen von .NET Framework gewährleistet.

Zum Aktivieren der Unterstützung für IRI müssen die folgenden zwei Änderungen vorgenommen werden:

  1. Fügen Sie der Datei machine.config im .NET Framework 2.0-Verzeichnis die folgende Zeile hinzu:

    <section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    
  2. Geben Sie an, ob IDN-Analysen (Internationalized Domain Name) auf den Domänennamen angewendet und ob IRI-Analyseregeln beachtet werden sollen. Dies können Sie in der Datei machine.config oder in der Datei app.config festlegen. Fügen Sie beispielsweise Folgendes hinzu:

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

Durch das Aktivieren von IDN werden alle Unicode-Bezeichnungen in einem Domänennamen in ihre Punycode-Entsprechungen konvertiert. Punycode-Namen enthalten nur ASCII-Zeichen und beginnen immer mit dem Präfix xn--. Der Grund dafür besteht in der Unterstützung vorhandener DNS-Server im Internet, da die meisten DNS-Server nur ASCII-Zeichen unterstützen (siehe RFC 3940).

Das Aktivieren von IRI und IDN wirkt sich auf den Wert der Uri.DnsSafeHost-Eigenschaft aus. Das Aktivieren von IRI und IDN kann auch das Verhalten der Methoden Equals, OriginalString, GetComponents und IsWellFormedOriginalString ändern.

In Abhängigkeit von den verwendeten DNS-Servern gibt es drei mögliche Werte für IDN:

  • idn enabled = All

    Durch diesen Wert werden alle Unicode-Domänennamen in ihre Punycode-Entsprechungen (IDN-Namen) konvertiert.

  • idn enabled = AllExceptIntranet

    Durch diesen Wert werden alle Unicode-Domänennamen außerhalb des lokalen Intranets so konvertiert, dass die Punycode-Entsprechungen (IDN-Namen) verwendet werden. Wenn internationale Namen im lokalen Intranet verarbeitet werden sollen, müssen die DNS-Server im Intranet die Auflösung von Unicode-Namen unterstützen.

  • idn enabled = None

    Durch diesen Wert werden keine Unicode-Domänennamen in ihre Punycode-Entsprechungen konvertiert. Dies ist der Standardwert, der dem .NET Framework 2.0-Verhalten entspricht.

Durch das Aktivieren von IRI-Analysen (iriParsing enabled = true) werden Normalisierung und Zeichenüberprüfung gemäß den aktuellen IRI-Regeln in RFC 3987 ausgeführt. Der Standardwert ist false, bei dem Normalisierung und Zeichenüberprüfung gemäß RFC 2396 und RFC 3986 (für IPv6-Literale) ausgeführt werden.

Die IRI- und IDN-Verarbeitung in der Uri-Klasse kann auch mithilfe der Klassen System.Configuration.IriParsingElement, System.Configuration.IdnElement und System.Configuration.UriSection gesteuert werden, die Konfigurationseinstellungen enthalten. Die Einstellung System.Configuration.IriParsingElement aktiviert oder deaktiviert die IRI-Verarbeitung in der Uri-Klasse. Die Einstellung System.Configuration.IdnElement aktiviert oder deaktiviert die IDN-Verarbeitung in der Uri-Klasse. Mithilfe der Einstellung System.Configuration.IriParsingElement wird IDN auch indirekt gesteuert. Die IRI-Verarbeitung muss aktiviert sein, damit IDN-Verarbeitungsvorgänge ausgeführt werden können. Wenn die IRI-Verarbeitung deaktiviert ist, wird die IDN-Verarbeitung auf die Standardeinstellung festgelegt, in der das .NET Framework 2.0-Verhalten aus Kompatibilitätsgründen verwendet wird, und es werden keine IDN-Namen verwendet.

Die Konfigurationseinstellung für das System.Configuration.IriParsingElement und das System.Configuration.IdnElement wird einmal gelesen, wenn die erste System.Uri-Klasse erstellt wird. Änderungen an Konfigurationseinstellungen nach diesem Zeitpunkt werden ignoriert.

Die System.GenericUriParser-Klasse wurde außerdem so erweitert, dass das Erstellen eines anpassbaren Parsers möglich ist, der IRI und IDN unterstützt. Das Verhalten eines System.GenericUriParser-Objekts wird angegeben, indem eine bitweise Kombination der in der System.GenericUriParserOptions-Enumeration verfügbaren Werte an den System.GenericUriParser-Konstruktor übergeben wird. Der GenericUriParserOptions.IriParsing-Typ gibt an, dass der Parser die in RFC 3987 für IRI (International Resource Identifiers) angegebenen Analyseregeln unterstützt. Durch die oben beschriebenen Konfigurationswerte wird bestimmt, ob IRI verwendet wird.

Der GenericUriParserOptions.Idn-Typ gibt an, dass der Parser IDN-Analysen (Internationalized Domain Name) von Hostnamen unterstützt. Durch die oben beschriebenen Konfigurationswerte wird bestimmt, ob IDN verwendet wird.

Überlegungen zur Leistung

Wenn Sie eine Datei Web.config verwenden, die URIs zum Initialisieren Ihrer Anwendung enthält, wird die Dauer zum Verarbeiten der URIs zusätzlich verlängert, wenn die jeweiligen Schemabezeichner vom Standard abweichen. Initialisieren Sie die betroffenen Teile der Anwendung in diesem Fall erst dann, wenn die URIs benötigt werden, und nicht schon beim Start der Anwendung.

Hinweise zu Aufrufern:

Aufgrund dieser Sicherheitsbedenken sollten Sie bei der Anwendung mit Umsicht vorgehen, wenn Sie Uri-Instanzen von nicht vertrauenswürdigen Quellen akzeptieren, und dontEscape auf true festgelegt ist. Sie können eine URI-Zeichenfolge auf Gültigkeit prüfen, indem Sie die IsWellFormedOriginalString-Methode aufrufen.

Hinweis zu Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows CE:

.NET Compact Framework unterscheidet nicht zwischen relativen und absoluten Pfaden. Außerdem werden URI-Zeichenfolgen, denen das Schema file:// vorangestellt ist, in .NET Compact Framework anders verarbeitet als in .NET Framework. Die relative Angabe file://myfile wird als \\myfile aufgelöst. Die Angabe file:///myfile (3 Schrägstriche) wird in \myfile im Stammverzeichnis aufgelöst. Geben Sie absolute Pfade an, um die erfolgreiche Verarbeitung zu gewährleisten.

Im folgenden Beispiel wird eine Instanz der Uri-Klasse erstellt und für die Erstellung einer WebRequest-Instanz verwendet.

Uri siteUri = new Uri("http://www.contoso.com/");

WebRequest wr = WebRequest.Create(siteUri);



Uri siteUri = new Uri("http://www.contoso.com/");
WebRequest wr = WebRequest.Create(siteUri);


var siteUri : Uri = new Uri("http://www.contoso.com/");
var wr : WebRequest = WebRequest.Create(siteUri);



Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile für Smartphone, Windows Mobile für Pocket PC, Xbox 360

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

.NET Framework

Unterstützt in: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 3.5, 2.0, 1.0

XNA Framework

Unterstützt in: 2.0, 1.0
Anzeigen: