Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Methoden zum Erstellen von Uri Instanzen (Konstruktoren und TryCreate Factorymethoden) haben in der Vergangenheit die Länge der URI-Zeichenfolge auf etwa 65.000 Zeichen begrenzt (genaue Grenzwerte variieren geringfügig je nach Eingabeformat). Diese Grenzwerte wurden aufgehoben, sodass praktisch keine Obergrenze mehr für die Länge von Uri Instanzen besteht.
Eingeführte Version
.NET 10
Vorheriges Verhalten
Bisher war es nicht möglich, eine Uri Instanz zu erstellen, deren Länge etwa 65.000 Zeichen überschreitet. Code wie im folgenden Beispiel hat die UriFormatException Meldung "Ungültiger URI: Die URI-Zeichenfolge ist zu lang."
new Uri($"https://host/{new string('a', 100_000)}");
Neues Verhalten
Ab .NET 10 können Instanzen, die große Datenmengen enthalten, Uri jetzt erstellt werden. Beispiel:
string largeQuery = ...;
return new Uri($"https://someService/?query={Uri.EscapeDataString(largeQuery)}");
Die entfernten Einschränkungen gelten hauptsächlich für Pfade, Abfragen und Fragmente als die praktischsten Komponenten, um große Datenmengen zu übermitteln. Komponenten wie das Schema und der Host erzwingen möglicherweise noch einige Längenbeschränkungen. Praktische Einschränkungen beim Erreichen der von string festgelegten Längenbeschränkungen ebenfalls anfallen, sodass Sie Uri nicht verwenden sollten, um eine 10 GB-Datei darzustellen (noch sollten Sie es tun).
Art der einschneidenden Änderung
Diese Änderung ist eine Verhaltensänderung.
Grund für Änderung
Die meisten HTTP-Server erzwingen strenge Längenbeschränkungen für URLs, die sie in Anforderungen akzeptieren möchten. Die Grenzwerte sind im Allgemeinen viel niedriger als die vorherigen Grenzwerte von Uri. Da Uri der de facto Austauschtyp in .NET für URI-ähnliche Informationen ist, beschränkten die bisherigen Grenzwerte seine Nutzung in einigen Szenarien ohne gute Alternativen, abgesehen davon, die Verwendung von Uri in API-Verträgen zu entfernen.
Die wichtigsten Szenarien für große Uri sind:
-
data:URIs, die beliebige binäre Blobs enthalten, die in Base64 codiert sind. Diese können außerhalb der HTTP-Anforderungszeile übertragen werden. Sie können beispielsweise Teil des Anforderungstexts sein und daher beliebig groß sein. Uri kann jetzt verwendet werden, um Daten-URIs darzustellen, die größere Dateien enthalten. - Große Abfragezeichenfolgen. Uri wird häufig als Austauschtyp zwischen Systemen verwendet, auch wenn er nie als Teil einer HTTP-Anforderung gesendet wird. Benutzeranforderungsinformationen werden häufig als Teil der Abfragezeichenfolge codiert, sodass das neue Verhalten solche Szenarien auch dann ermöglicht, wenn die Datenmenge wächst.
Empfohlene Aktion
Für die meisten Benutzer ist keine Aktion erforderlich.
Wenn Sie Uri zur Erfassung von Längenbeschränkungen im Rahmen der Eingabeüberprüfung verwendet haben, müssen Sie nun die Längenüberprüfung selbst durchführen, vorzugsweise als Schritt, bevor Sie die Uri-Instanz erstellen. Da die meisten HTTP-Server in der Praxis viel strengere Längenbeschränkungen durchsetzen, führten sehr lange Eingaben bereits häufig zu Fehlern, wenn sie als Teil einer HTTP-Anforderung gesendet wurden. Möglicherweise stellen Sie fest, dass Ihr Szenario von einer noch strengeren Längenvalidierung profitieren würde als dies Uri zuvor getan hat.
Betroffene APIs
- Uri
- System.Uri.TryCreate
- Alle Uri Mitglieder, die Uri Informationen zur Instanz zurückgeben, z. B.: