Je voudrais analyser une chaîne comme p1=6&p2=7&p3=8
dans un fichier NameValueCollection
.
Quelle est la manière la plus élégante de faire cela lorsque vous n'avez pas accès à l' Page.Request
objet?
.net
parsing
query-string
Nathan Smith
la source
la source
HttpUtility.ParseQueryString
serait ma recommandation sauf que dans le cas duHttpUtility.ParseQueryString("&X=1&X=2&X=3")
résultat,....X=1,2,3...
avoir plusieurs paramètres du même nom est rare mais nécessaire pour prendre en charge les paramètres du contrôleur tels que int [], IEnumerable <int>, etc. (ces paramètres peuvent être utilisés pour prendre en charge plusieurs cases à cocher) voir "Plusieurs occurrences de la même variable de chaîne de requête sont consolidées dans une seule entrée" selon le site MS . Une version artisanale de la méthode pourrait être votre seule optionHttpUtility.ParseQueryString fonctionnera tant que vous êtes dans une application Web ou que cela ne vous dérange pas d'inclure une dépendance sur System.Web. Une autre façon de procéder est:
la source
?foo=1&bar
.HttpUtility
l'analyserait comme{ key = null, value = "bar" }
Un grand nombre de réponses fournissent des exemples personnalisés en raison de la dépendance de la réponse acceptée à System.Web . À partir du package NuGet Microsoft.AspNet.WebApi.Client , il existe une méthode UriExtensions.ParseQueryString , qui peut également être utilisée:
Donc, si vous voulez éviter la dépendance System.Web et que vous ne voulez pas rouler vous-même, c'est une bonne option.
la source
Je voulais supprimer la dépendance sur System.Web afin que je puisse analyser la chaîne de requête d'un déploiement ClickOnce, tout en ayant les prérequis limités au "Sous-ensemble de cadre client uniquement".
J'ai aimé la réponse de RP. J'ai ajouté une logique supplémentaire.
la source
J'avais besoin d'une fonction un peu plus polyvalente que ce qui était déjà fourni lors de l'utilisation de requêtes OLSC.
Voici ma solution:
Ce n'est peut-être pas une mauvaise idée de s'attaquer
<Extension()>
à cela aussi pour ajouter la capacité à Uri lui-même.la source
Pour ce faire sans
System.Web
, sans l'écrire vous-même et sans packages NuGet supplémentaires:System.Net.Http.Formatting
using System.Net.Http;
Utilisez ce code:
https://msdn.microsoft.com/en-us/library/system.net.http.uriextensions(v=vs.118).aspx
la source
Si vous souhaitez éviter la dépendance à System.Web requise pour utiliser HttpUtility.ParseQueryString , vous pouvez utiliser la
Uri
méthode d'extensionParseQueryString
trouvée dansSystem.Net.Http
.Assurez-vous d'ajouter une référence (si vous ne l'avez pas déjà fait) à
System.Net.Http
dans votre projet.Notez que vous devez convertir le corps de la réponse en un fichier valide
Uri
pour queParseQueryString
(inSystem.Net.Http
) fonctionne.la source
la source
Je viens de réaliser que Web API Client a une
ParseQueryString
méthode d'extension qui fonctionne sur aUri
et retourne aHttpValueCollection
:la source
Accédez simplement à Request.QueryString. AllKeys mentionné comme une autre réponse vous donne juste un tableau de clés.
la source
HttpUtility.ParseQueryString(Request.Url.Query)
return estHttpValueCollection
(classe interne). Il hérite deNameValueCollection
.la source
Si vous ne voulez pas la dépendance System.Web, collez simplement ce code source de la classe HttpUtility.
Je viens de fouetter cela à partir du code source de Mono . Il contient le HttpUtility et toutes ses dépendances (comme IHtmlString, Helpers, HttpEncoder, HttpQSCollection).
Ensuite, utilisez
HttpUtility.ParseQueryString
.https://gist.github.com/bjorn-ali-goransson/b04a7c44808bb2de8cca3fc9a3762f9c
la source
Puisque tout le monde semble coller sa solution ... voici la mienne :-) J'en avais besoin depuis une bibliothèque de classes sans
System.Web
récupérer les paramètres d'id à partir des hyperliens stockés.Je pensais partager parce que je trouve cette solution plus rapide et plus esthétique.
Usage:
la source
Accédez à Request.QueryString.Keys pour un NameValueCollection de tous les paramètres de chaîne de requête.
la source
Pour obtenir toutes les valeurs Querystring, essayez ceci:
la source
la source
la source
Je traduis en version C # de josh-brown en VB
la source
C'est mon code, je pense que c'est très utile:
la source