Ich habe URLs festgelegt, die den folgenden in einer Liste ähnlich sind
- http://somesite.com/backup/lol.php?id=1&server=4&location=us
- http://somesite.com/news.php?article=1&lang=de
Ich habe es geschafft, die Abfragezeichenfolgen mit dem folgenden Code abzurufen:
myurl = longurl.Split('?');
NameValueCollection qs = HttpUtility.ParseQueryString(myurl [1]);
foreach (string lol in qs)
{
// results will return
}
Es werden jedoch nur die Parameter wie ID , Server , Standort usw. basierend auf der angegebenen URL zurückgegeben.
Ich muss den vorhandenen Abfragezeichenfolgen Werte hinzufügen / anhängen.
Zum Beispiel mit der URL:
http://somesite.com/backup/index.php?action=login&attempt=1
Ich muss die Werte der Abfragezeichenfolgenparameter ändern:
action = login1
Versuche = 11
Wie Sie sehen können, habe ich für jeden Wert "1" angehängt. Ich muss eine Reihe von URLs aus einer Zeichenfolge mit verschiedenen Abfragezeichenfolgen abrufen und jedem Parameter am Ende einen Wert hinzufügen und sie erneut einer Liste hinzufügen.
quelle
HttpUtility.UrlEncode()
bei der Zuweisung von Parameterwerten verwenden?HttpUtility.ParseQueryString
Methode gibt eine spezielle NameValueCollection-Implementierung zurück, die dies bereits hinter den Kulissen behandelt, wenn Sie einen Wert festlegen.Ich habe Darins Antwort in eine gut wiederverwendbare Erweiterungsmethode eingewickelt .
Ich hoffe das hilft!
quelle
Die bereitgestellten Antworten haben Probleme mit relativen URLs, wie z. B. "/ some / path /". Dies ist eine Einschränkung der Klassen Uri und UriBuilder, die ziemlich schwer zu verstehen ist, da ich keinen Grund sehe, warum relative URLs problematisch wären wenn es um die Manipulation von Abfragen geht.
Hier ist eine Problemumgehung, die sowohl für absolute als auch für relative Pfade funktioniert, die in .NET 4 geschrieben und getestet wurden:
(kleine Anmerkung: Das sollte funktionieren auch in .NET 4.5, werden Sie nur ändern müssen ,
propInfo.GetValue(values, null)
umpropInfo.GetValue(values)
)Und hier ist eine Reihe von Unit-Tests, um das Verhalten zu testen:
quelle
uri.AbsoluteUri
alsuri.ToString()
wegen böser, nicht entkommender Effekte.uri.AbsoluteUri
wirft, wenn der Uri nicht absolut ist!Beachten Sie, dass Sie das
Microsoft.AspNetCore.WebUtilities
Nuget-Paket von Microsoft hinzufügen und damit Werte an die Abfragezeichenfolge anhängen können:quelle
AddQueryString
ist, dass es immer hinzufügt, wenn es bereits den Schlüssel gibt, es wird nicht aktualisiert, sondern doppelte Schlüssel erstellen, mit ist schlechtDie folgende Lösung funktioniert für ASP.NET 5 (vNext) und verwendet die QueryHelpers-Klasse, um einen URI mit Parametern zu erstellen.
Die Ergebnis-URI hätte
http://iberia.com?param1=value1¶m2=value2¶m3=value3
quelle
Das Ende aller Probleme bei der Bearbeitung von URL-Abfragezeichenfolgen
Nach viel Mühe und Fummelei mit der Uri-Klasse und anderen Lösungen sind hier meine Methoden zur String- Erweiterung, um meine Probleme zu lösen.
quelle
string
s zu verwenden, um URLs wie diese darzustellen, wenn man bedenkt, dass dieUri
Klasse zu diesem Zweck bereits existiert. Verwenden Sie dies entweder oder erstellen Sie eine brandneue Abstraktion, wenn Funktionen fehlen.Ich mag Björns Antwort, aber die von ihm bereitgestellte Lösung ist irreführend, da die Methode einen vorhandenen Parameter aktualisiert, anstatt ihn hinzuzufügen, wenn er nicht vorhanden ist. Um ihn ein bisschen sicherer zu machen, habe ich ihn unten angepasst.
quelle
query[paramName] = paramValue;
in allen Fällen. Wenn es existiert, wird es überschrieben. Wenn es nicht existiert, wird der Schlüssel erstellt.Mein Ansatz ist für Anfänger sehr einfach:
quelle