Ich möchte eine Zeichenfolge wie p1=6&p2=7&p3=8
in a analysieren NameValueCollection
.
Was ist die eleganteste Art, dies zu tun, wenn Sie keinen Zugriff auf das Page.Request
Objekt haben?
.net
parsing
query-string
Nathan Smith
quelle
quelle
HttpUtility.ParseQueryString
wäre meine Empfehlung, außer dass es im Fall desHttpUtility.ParseQueryString("&X=1&X=2&X=3")
Ergebnisses....X=1,2,3...
ungewöhnlich ist, mehrere Parameter mit demselben Namen zu haben, aber zur Unterstützung von Controller-Parametern wie int [], IEnumerable <int> usw. erforderlich sind (solche Parameter können zur Unterstützung mehrerer Kontrollkästchen verwendet werden). Siehe "Mehrere Vorkommen derselben Abfragezeichenfolgenvariablen werden in einem Eintrag konsolidiert" gemäß MS-Site . Eine handgefertigte Version der Methode könnte Ihre einzige Option seinHttpUtility.ParseQueryString funktioniert so lange, wie Sie sich in einer Webanwendung befinden oder es Ihnen nichts ausmacht, eine Abhängigkeit von System.Web einzuschließen. Ein anderer Weg, dies zu tun, ist:
quelle
?foo=1&bar
.HttpUtility
würde es analysieren als{ key = null, value = "bar" }
Viele der Antworten enthalten benutzerdefinierte Beispiele, da die akzeptierte Antwort von System.Web abhängt . Aus dem NuGet-Paket Microsoft.AspNet.WebApi.Client gibt es eine UriExtensions.ParseQueryString- Methode, die auch verwendet werden kann:
Wenn Sie also die System.Web- Abhängigkeit vermeiden und keine eigene rollen möchten, ist dies eine gute Option.
quelle
Ich wollte die Abhängigkeit von System.Web entfernen, damit ich die Abfragezeichenfolge einer ClickOnce-Bereitstellung analysieren kann, während die Voraussetzungen auf die "Nur-Client-Framework-Teilmenge" beschränkt sind.
Ich mochte die Antwort von rp. Ich habe eine zusätzliche Logik hinzugefügt.
quelle
Ich brauchte eine Funktion, die etwas vielseitiger ist als die, die bereits bei der Arbeit mit OLSC-Abfragen bereitgestellt wurde.
Hier ist meine Lösung:
Es ist vielleicht keine schlechte Idee, auch das in Angriff
<Extension()>
zu nehmen, um Uri selbst die Fähigkeit zu verleihen.quelle
Um dies ohne
System.Web
, ohne selbst zu schreiben und ohne zusätzliche NuGet-Pakete zu tun :System.Net.Http.Formatting
using System.Net.Http;
Verwenden Sie diesen Code:
https://msdn.microsoft.com/en-us/library/system.net.http.uriextensions(v=vs.118).aspx
quelle
Wenn Sie die Abhängigkeit von System.Web vermeiden möchten, die für die Verwendung von HttpUtility.ParseQueryString erforderlich ist , können Sie die
Uri
ErweiterungsmethodeParseQueryString
in verwendenSystem.Net.Http
.Stellen Sie sicher, dass Sie
System.Net.Http
Ihrem Projekt eine Referenz hinzufügen (falls Sie dies noch nicht getan haben) .Beachten Sie, dass Sie den Antworttext in einen gültigen konvertieren müssen,
Uri
damitParseQueryString
(inSystem.Net.Http
) funktioniert.quelle
quelle
Ich habe gerade festgestellt, dass der Web-API-Client eine
ParseQueryString
Erweiterungsmethode hat, die auf a funktioniertUri
und Folgendes zurückgibtHttpValueCollection
:quelle
Greifen Sie einfach auf Request.QueryString zu. AllKeys, das als weitere Antwort erwähnt wird, bietet Ihnen nur eine Reihe von Schlüsseln.
quelle
HttpUtility.ParseQueryString(Request.Url.Query)
return isHttpValueCollection
(interne Klasse). Es erbt vonNameValueCollection
.quelle
Wenn Sie die System.Web-Abhängigkeit nicht möchten, fügen Sie einfach diesen Quellcode aus der HttpUtility-Klasse ein.
Ich habe das gerade aus dem Quellcode von Mono zusammengestellt . Es enthält die HttpUtility und alle ihre Abhängigkeiten (wie IHtmlString, Helpers, HttpEncoder, HttpQSCollection).
Dann verwenden
HttpUtility.ParseQueryString
.https://gist.github.com/bjorn-ali-goransson/b04a7c44808bb2de8cca3fc9a3762f9c
quelle
Da jeder seine Lösung einzufügen scheint .. hier ist meine :-) Ich brauchte diese aus einer Klassenbibliothek heraus, ohne
System.Web
ID-Parameter von gespeicherten Hyperlinks abzurufen.Ich dachte, ich würde teilen, weil ich diese Lösung schneller finde und besser aussehe.
Verwendung:
quelle
Klicken Sie auf Request.QueryString.Keys, um eine NameValueCollection aller Abfragezeichenfolgenparameter zu erhalten.
quelle
Um alle Querystring-Werte zu erhalten, versuchen Sie Folgendes:
quelle
quelle
quelle
Ich übersetze in VB in die C # -Version von Josh-Brown
quelle
Dies ist mein Code, ich denke, es ist sehr nützlich:
quelle