Ich erhalte einen absoluten URI, der eine Abfragezeichenfolge enthält. Ich möchte einen Wert sicher an die Abfragezeichenfolge anhängen und einen vorhandenen Parameter ändern.
Ich würde es vorziehen, nicht anzuheften &foo=bar
oder reguläre Ausdrücke zu verwenden, URI-Escape ist schwierig. Vielmehr möchte ich einen eingebauten Mechanismus verwenden, von dem ich weiß, dass er dies korrekt ausführt und das Entkommen handhabt.
Ich habe gefunden , eine Tonne von Antworten , die jede Nutzung HttpUtility
. Da es sich jedoch um ASP.NET Core handelt, gibt es keine System.Web-Assembly mehr, also keine mehr HttpUtility
.
Was ist der geeignete Weg, um dies in ASP.NET Core zu tun, während Sie auf die Core-Laufzeit abzielen?
c#
asp.net
asp.net-core
vcsjones
quelle
quelle
Microsoft.AspNet.WebUtilties
kann dieMono.HttpUtility
Bibliothek sein .HttpUtility
undParseQueryString
Verfahren.Antworten:
Wenn Sie ASP.NET Core 1 oder 2 verwenden, können Sie dies
Microsoft.AspNetCore.WebUtilities.QueryHelpers
in den Microsoft.AspNetCore.WebUtilities tun Paket .Wenn Sie ASP.NET Core 3.0 oder höher verwenden,
WebUtilities
ist es jetzt Teil des ASP.NET SDK und erfordert keine separate Nuget-Paketreferenz.So analysieren Sie es in ein Wörterbuch:
Beachten Sie, dass im Gegensatz
ParseQueryString
zu System.Web ein Wörterbuch vom TypIDictionary<string, string[]>
in ASP.NET Core 1.x oder zurückgegeben wirdIDictionary<string, StringValues>
in ASP.NET Core 2.x oder höher zurückgegeben wird, sodass der Wert eine Sammlung von Zeichenfolgen ist. Auf diese Weise verarbeitet das Wörterbuch mehrere Abfragezeichenfolgenparameter mit demselben Namen.Wenn Sie der Abfragezeichenfolge einen Parameter hinzufügen möchten, können Sie eine andere Methode verwenden für
QueryHelpers
:Mit .net Core 2.2 können Sie die Abfragezeichenfolge mit abrufen
Sie erhalten eine Sammlung von Schlüssel: Wert-Paaren - so
quelle
Microsoft.AspNetCore.WebUtilities
stattdessen.Der einfachste und intuitivste Weg, einen absoluten URI zu verwenden und seine Abfragezeichenfolge nur mit ASP.NET Core-Paketen zu bearbeiten, kann in wenigen einfachen Schritten erfolgen:
Installieren Sie Pakete
PM> Installationspaket Microsoft.AspNetCore.WebUtilities
PM> Installationspaket Microsoft.AspNetCore.Http.Extensions
Wichtige Klassen
Um sie darauf hinzuweisen, hier sind die beiden wichtigen Klassen, die wir verwenden werden: QueryHelpers , StringValues , QueryBuilder .
Der Code
Um über Änderungen auf dem Laufenden zu bleiben, können Sie meinen Blog-Beitrag dazu hier lesen : http://benjii.me/2017/04/parse-modify-query-strings-asp-net-core/
quelle
HttpRequest
hat eineQuery
Eigenschaft, die die analysierte Abfragezeichenfolge über dieIReadableStringCollection
Schnittstelle verfügbar macht:Diese Diskussion auf GitHub weist ebenfalls darauf hin.
quelle
Diese Funktion wird zurückgegeben
Dictionary<string, string>
undMicrosoft.xxx
aus Kompatibilitätsgründen nicht verwendetAkzeptiert die Parametercodierung auf beiden Seiten
Akzeptiert doppelte Schlüssel (letzten Wert zurückgeben)
quelle
Es ist wichtig zu beachten, dass in der Zeit, seit die Top-Antwort als richtig markiert wurde,
Microsoft.AspNetCore.WebUtilities
ein Hauptversionsupdate (von 1.xx auf 2.xx) durchgeführt wurde.Das heißt, wenn Sie dagegen bauen, müssen
netcoreapp1.1
Sie Folgendes ausführen, wodurch die neueste unterstützte Version installiert wird1.1.2
:Install-Package Microsoft.AspNetCore.WebUtilities -Version 1.1.2
quelle
Ich benutze dies als Erweiterungsmethode, arbeitet mit einer beliebigen Anzahl von Parametern:
Nächste und vorherige Links zum Beispiel in einer Ansicht:
quelle