donné est une URL comme Quel est le moyen le plus simple de remplacer les deux valeurs de paramètre URL ( Par exemple 10 à 12 et 14 à 7)? p> regex, string.replace, sous-chaîne ou linq - je suis un peu coincé. p> Merci d'avance, P> TIM P> J'ai pris fin avec la suite, cela fonctionne pour moi car cette page n'a que ces deux paramètres: p> mais merci de vos suggestions :) p> p> http: // localhost: 1973 / services.aspx? idproject = 10 & idservice = 14 code>.
8 Réponses :
La voie la plus robuste serait d'utiliser la classe URI pour analyser la chaîne, modifier les valeurs de paramètres TE, puis construire le résultat. p>
Il y a beaucoup de nuances à la manière dont les URL fonctionnent et que vous pourriez essayer de rouler votre propre regex pour le faire, il pourrait rapidement être compliqué de manipuler tous les cas. p>
Toutes les autres méthodes auraient des problèmes avec des correspondances de sous-chaîne, etc. et je ne vois même pas comment LINQ s'applique ici. p>
Le moyen le plus simple est string.replace CODE>, mais vous vous retrouverez avec des problèmes si votre URI ressemble à
http: // localhost: 1212 / base.axd? ID = 12 et autres idées = 12 code> p>
L'exigence de l'OP ne peut pas être remplie correctement avec un remplacement simple de chaîne.
Je sais que je déclare donc (même implicitement) que la voie la plus simple (comme demandé) n'est pas la bonne voie.
En fait, j'ai fini par utiliser string.replace (voir mon édition), cela fonctionne pour mes besoins.
@Tim - Puis-je obtenir au moins un uppote s'il s'agit de la réponse que vous avez la plus aimée alors?
Le C # HTTTPUTILITTILITTILITTILITY.PARERERERERERERERERYERERERRAIRE LE SUPPORT DU SUPPORT POUR VOUS. Vous voudrez faire une vérification plus robuste NULL dans votre version finale.
Pourquoi réussira Rawurl à PalleryString? Il y a une différence entre une chaîne de requête et une URL. Ne devriez-vous pas fragmenter l'URL d'abord afin d'extraire la chaîne de requête?
Ouais, bonne réponse, mais si vous passez l'URL entière, votre premier argument est à ressembler à http: // localhost: 50819 / demande? Pagenumber code> au lieu de
pagenumber code >.
J'ai trouvé cela dans un exemple de code ancien, ne prendrait pas grand chose à l'améliorer, en prenant un ienumerable
var url = AppendQueryString("http://localhost:1973/Services.aspx?idProject=10&idService=14","idProject=12&idService=17");
Merci. J'ai utilisé un simple remplacement car la page n'a que ces deux paramètres mais votre réponse est un bon exemple pour une meilleure façon;)
Vous devriez indiquer que le keyvalue devrait être correctement codé pour que cela fonctionne. Si je veux envoyer Query =? Est code> avec ceci, il créera une chaîne de requête non valide
C'est ce que je ferais: usage: p> ou: p>
Merci, cela semble prometteur, j'aurai un aspect plus proche plus tard.
J'ai le même problème et je l'ai résolu avec les trois lignes de code suivantes que je reçois des coments ici (comme Stephen Oberauer's Solution, mais moins surencieux):
' EXAMPLE: ' INPUT: /MyUrl.aspx?IdCat=5&Page=3 ' OUTPUT: /MyUrl.aspx?IdCat=5&Page=4 ' Get the URL and breaks each param into Key/value collection: Dim Col As NameValueCollection = System.Web.HttpUtility.ParseQueryString(Request.RawUrl) ' Changes the param you want in the url, with the value you want Col.Item("Page") = "4" ' Generates the output string with the result (it also includes the name of the page, not only the params ) Dim ChangedURL As String = HttpUtility.UrlDecode(Col.ToString())
Voici mon implémentation: et voici quelques exemples: p>
Beau et pas d'effets secondaires
J'ai récemment publié uribuilillextension , qui est une bibliothèque qui fait éditer des chaînes de requête sur Vous venez de créer un objet Exemple rapide: P> Uribuilder code> Objets une brise à travers des méthodes d'extension.
uribuilder code> avec votre chaîne d'URL actuelle dans le constructeur, modifiez la requête via les méthodes d'extension et construisez la nouvelle String URL à partir du
uribuilder code> objet. P>
string myUrl = "http://www.example.com/?idProject=10&idService=14";
UriBuilder builder = new UriBuilder(myUrl);
builder.SetQuery("idProject", "12");
builder.SetQuery("idService", "7");
string newUrl = builder.Url.ToString();