J'ai un ensemble d'URL similaires à celles ci-dessous dans une liste
- http://somesite.com/backup/lol.php?id=1&server=4&location=us
- http://somesite.com/news.php?article=1&lang=en
J'ai réussi à obtenir les chaînes de requête en utilisant le code suivant:
myurl = longurl.Split('?');
NameValueCollection qs = HttpUtility.ParseQueryString(myurl [1]);
foreach (string lol in qs)
{
// results will return
}
Mais il ne renvoie que les paramètres tels que l' id , le serveur , l' emplacement , etc. en fonction de l'URL fournie.
Ce dont j'ai besoin est d'ajouter / ajouter des valeurs aux chaînes de requête existantes.
Par exemple avec l'URL:
http://somesite.com/backup/index.php?action=login&attempts=1
J'ai besoin de modifier les valeurs des paramètres de la chaîne de requête:
action = login1
tentatives = 11
Comme vous pouvez le voir, j'ai ajouté "1" pour chaque valeur. J'ai besoin d'obtenir un ensemble d'URL à partir d'une chaîne contenant différentes chaînes de requête et d'ajouter une valeur à chaque paramètre à la fin et de les ajouter à nouveau à une liste.
la source
HttpUtility.UrlEncode()
lors de l'attribution d'une valeur de paramètre?HttpUtility.ParseQueryString
méthode retourne une implémentation spéciale de NameValueCollection qui gère déjà cela en arrière-plan lorsque vous définissez une valeur.J'ai enveloppé la réponse de Darin dans une méthode d'extension joliment réutilisable.
J'espère que ça aide!
la source
Les réponses fournies ont des problèmes avec les URL relatives, telles que "/ some / path /". Ceci est une limitation de la classe Uri et UriBuilder, ce qui est assez difficile à comprendre, car je ne vois aucune raison pour laquelle les URL relatives seraient problématiques lorsqu'il s'agit de manipulation de requêtes.
Voici une solution de contournement qui fonctionne pour les chemins absolus et relatifs, écrits et testés dans .NET 4:
(petite note: cela devrait également fonctionner dans .NET 4.5, il vous suffira de changer
propInfo.GetValue(values, null)
pourpropInfo.GetValue(values)
)Et voici une suite de tests unitaires pour tester le comportement:
la source
uri.AbsoluteUri
plutôturi.ToString()
qu'en raison d'effets désagréables qui ne vous échappent pas.uri.AbsoluteUri
jette, si l'URI n'est pas absolu!Notez que vous pouvez ajouter le
Microsoft.AspNetCore.WebUtilities
package nuget de Microsoft, puis l'utiliser pour ajouter des valeurs à la chaîne de requête:la source
AddQueryString
est qu'il ajoutera toujours, s'il y a déjà la clé, il ne se mettra pas à jour, mais créera des clés en double, avec c'est mauvaisLa solution suivante fonctionne pour ASP.NET 5 (vNext) et utilise la classe QueryHelpers pour créer un URI avec des paramètres.
Le résultat URI aurait
http://iberia.com?param1=value1¶m2=value2¶m3=value3
la source
La fin de tous les problèmes d'édition de chaîne de requête URL
Après beaucoup de travail et de bidouillage avec la classe Uri et d'autres solutions, voici mes méthodes d'extension de chaîne pour résoudre mes problèmes.
la source
string
s bruts pour représenter des URL comme celle-ci, étant donné que laUri
classe existe déjà à cette fin. Utilisez-le ou créez une toute nouvelle abstraction si des fonctionnalités manquent.J'aime la réponse de Bjorn, mais la solution qu'il a fournie est trompeuse, car la méthode met à jour un paramètre existant, plutôt que de l'ajouter s'il n'existe pas. Pour le rendre un peu plus sûr, je l'ai adapté ci-dessous.
la source
query[paramName] = paramValue;
dans tous les cas. Il existe, il sera remplacé. S'il n'existe pas, la clé sera créée.Mon approche est très simple, pour les débutants:
la source