Ersetzen Sie Artikel in den querystring
Ich habe eine URL, die möglicherweise ebenfalls einen query-string der query-string kann leer sein oder mehrere Elemente.
Möchte ich ersetzen Sie eines der Elemente in der Abfrage-string oder hinzufügen, wenn das Element nicht schon vorhanden ist.
Ich habe ein URI-Objekt mit der kompletten URL.
Meine erste Idee war der Einsatz von regex und einige string-Magie, das sollte es tun.
Aber es scheint ein bisschen wackelig, vielleicht der Rahmen hat einige query-string-builder-Klasse?
InformationsquelleAutor Karsten | 2009-04-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht könnten Sie die
System.UriBuilder
Klasse. Es hat eineAbfrage
Eigenschaft.Die Abfrage-Eigenschaft die URI-Objekt ist schreibgeschützt.
Die
Query
Eigenschaft auf dieSystem.UriBuilder
Klasse ist veränderlich.Dies ist nicht sinnvoll, die Abfrage-Eigenschaft ist nur einen string
stackoverflow.com/questions/14517798/... diese Antwort ist besser.
InformationsquelleAutor knut
Ich fand das war eine mehr elegante Lösung
Die meisten schlüssige Antwort. Danke!
Dies sollte die akzeptierte Antwort.
Beachten Sie, dass dies funktioniert, da ParseQueryString tatsächlich gibt eine Instanz HttpValueCollection, die überschreibt object.ToString, während ein normaler NameValueCollection-Objekt würde nur print-out-System.Sammlungen.Spezialisierte.NameValueCollection.
InformationsquelleAutor Chris
Können diese url:
https://localhost/video?param1=value1
Beim ersten update-spezifische Abfrage, string param, um neuer Wert:
Nächsten erstellen
UriBuilder
- und update -Query
Eigenschaft, die zur Herstellung neuer uri mit geänderter param Wert.Nun haben Sie in
newUri
dieser Wert:https://localhost/video?param1=newValue2
Uri
Objekt. Wir können das wie folgt tun:var uriBuilder = new UriBuilder("https://localhost/video?param1=value1"); var qs = HttpUtility.ParseQueryString(uriBuilder.Query); qs.Set("param1", "newValue2"); uriBuilder.Query = qs.ToString(); var newUri = uriBuilder.Uri;
InformationsquelleAutor psulek
Diese scheint wirklich gut zu funktionieren.
InformationsquelleAutor Damian
Verwende ich die folgende Methode:
InformationsquelleAutor Dani
Nein, der Rahmen nicht über alle vorhandenen QueryStringBuilder Klasse, aber in der Regel die querystring-Informationen in einer HTTP-Anforderung als durchsuchbar und suchbar
NameValueCollection
über dieRequest.Querystring
Eigenschaft.Da Sie beginnen mit einer
Uri
Objekt, jedoch, benötigen Sie die querystring-Teil mit derQuery
Eigenschaft desUri
Objekt. Dies ergibt einen string der form:Können Sie dann aufgeteilt string auf das kaufmännische und-Zeichen zu unterscheiden, die es in verschiedenen querystring-Parameter-Wert-Paare. Dann wieder aufgeteilt jeden parameter die " = " - Zeichen zu differenzieren, die in einem Schlüssel und einem Wert.
Da Ihr Ziel ist, die Suche nach einem bestimmten querystring der Schlüssel, und wenn notwendig, erstellen Sie es, sollten Sie versuchen, (wieder)eine Sammlung erstellen (möglichst generisch), mit dem Sie einfach die Suche in der Sammlung, ähnlich der Anlage, die von der
NameValueCollection
Klasse.InformationsquelleAutor Cerebrus
Ich verwendete den folgenden code anfügen/ersetzen Sie den Wert eines Parameters in den aktuellen Anforderungs-URL:
Vielleicht hilft das auch anderen bei der Suche nach diesem Thema.
Update:
Sah nur den Tipp, dass UriBuilder und habe eine zweite version mit UriBuilder, StringBuilder und Linq:
InformationsquelleAutor Marc
Ich Stimme mit Cerebrus. Kleben das KISS-Prinzip haben Sie die querystring,
wissen Sie, was Sie suchen und was Sie möchten, um es zu ersetzen.
So etwas wie dieses:-
InformationsquelleAutor Steve
Antwortete ich ein ähnliche Frage eine Weile her. Im Grunde der beste Weg wäre, um die Klasse
HttpValueCollection
, die dieQueryString
Eigentum eigentlich ist, leider ist es intern in der .NET-framework.Könnten Sie den Reflektor, um es zu packen (und legen Sie es in Ihrem Utils-Klasse). Auf diese Weise konnte Sie manipulieren den query-string wie eine NameValueCollection, aber mit der url-Kodierung/Dekodierung Probleme gesorgt für Sie.
HttpValueCollection
erstrecktNameValueCollection
, und hat einen Konstruktor, ein kodierter Abfrage-string (kaufmännische und-Zeichen und Fragezeichen im Lieferumfang enthalten), und es wird eineToString()
Methode, um später den Wiederaufbau der query-string aus der zugrunde liegenden collection.InformationsquelleAutor Igal Tabachnik
Könntest du einige Erklärungen zu der Antwort?
originol query = ?q=&geo=&Abstand=1&search=1&fp=1; ammended Query = ?f=10&geo=geobird&Abstand=10&search=8&fp=2&size=10&Bereich=250 QueryParams pc = new QueryParams(url); pc.Fügen Sie("size", 10); pc.Fügen Sie("Bereich", "250"); string ammended = pc.SetQueryParam("geo","geobird").SetQueryParam("q", "10").SetQueryParam("Suche", 8).SetQueryParam("fp", "2").ToString();
Wenn Sie sich Fragen, ob der code verbessert werden kann, dann kannst du es als Frage auf CodeReview.SE
InformationsquelleAutor guest
Können Sie die Geschwindigkeit RegExps durch das vorkompilieren.
Schauen Sie sich dieses tutorial
InformationsquelleAutor majkinetor