9
votes

Comment remplacer URL-paramètre?

donné est une URL comme http: // localhost: 1973 / services.aspx? idproject = 10 & idservice = 14 .

Quel est le moyen le plus simple de remplacer les deux valeurs de paramètre URL ( Par exemple 10 à 12 et 14 à 7)?

regex, string.replace, sous-chaîne ou linq - je suis un peu coincé.

Merci d'avance,

TIM


J'ai pris fin avec la suite, cela fonctionne pour moi car cette page n'a que ces deux paramètres: xxx

mais merci de vos suggestions :)


0 commentaires

8 Réponses :


1
votes

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.

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.

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.


0 commentaires

2
votes

Le moyen le plus simple est string.replace , mais vous vous retrouverez avec des problèmes si votre URI ressemble à http: // localhost: 1212 / base.axd? ID = 12 et autres idées = 12


4 commentaires

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?



8
votes

Le C # HTTTPUTILITTILITTILITTILITY.PARERERERERERERERERYERERERRAIRE LE SUPPORT DU SUPPORT POUR VOUS. Vous voudrez faire une vérification plus robuste NULL dans votre version finale. xxx


2 commentaires

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 au lieu de pagenumber .



2
votes

J'ai trouvé cela dans un exemple de code ancien, ne prendrait pas grand chose à l'améliorer, en prenant un ienumerable > code> peut être meilleur que la chaîne délimiée actuelle.

   var url = AppendQueryString("http://localhost:1973/Services.aspx?idProject=10&idService=14","idProject=12&idService=17");


2 commentaires

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 avec ceci, il créera une chaîne de requête non valide



16
votes

C'est ce que je ferais: xxx

usage: xxx

ou: xxx


1 commentaires

Merci, cela semble prometteur, j'aurai un aspect plus proche plus tard.



0
votes

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())


0 commentaires

9
votes

Voici mon implémentation: xxx

et voici quelques exemples: xxx


1 commentaires

Beau et pas d'effets secondaires



2
votes

J'ai récemment publié uribuilillextension , qui est une bibliothèque qui fait éditer des chaînes de requête sur Uribuilder code> Objets une brise à travers des méthodes d'extension.

Vous venez de créer un objet 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>

Exemple rapide: 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();


0 commentaires