On me donne un URI absolu qui contient une chaîne de requête. Je cherche à ajouter en toute sécurité une valeur à la chaîne de requête et à modifier un paramètre existant.
Je préférerais ne pas clouer &foo=bar
ou utiliser des expressions régulières, l'échappement d'URI est délicat. Je souhaite plutôt utiliser un mécanisme intégré dont je sais qu'il le fera correctement et gérera l'échappement.
J'ai trouvé une tonne de réponses que toutes utilisent HttpUtility
. Cependant, étant ASP.NET Core, il n'y a plus d'assembly System.Web, donc plus HttpUtility
.
Quelle est la manière appropriée de le faire dans ASP.NET Core tout en ciblant le runtime principal?
c#
asp.net
asp.net-core
vcsjones
la source
la source
Microsoft.AspNet.WebUtilties
peut-être laMono.HttpUtility
bibliothèque .HttpUtility
etParseQueryString
méthode.Réponses:
Si vous utilisez ASP.NET Core 1 ou 2, vous pouvez le faire avec
Microsoft.AspNetCore.WebUtilities.QueryHelpers
dans le package Microsoft.AspNetCore.WebUtilities .Si vous utilisez ASP.NET Core 3.0 ou version ultérieure,
WebUtilities
fait maintenant partie du SDK ASP.NET et ne nécessite pas de référence de package nuget distincte.Pour l'analyser dans un dictionnaire:
Notez que contrairement
ParseQueryString
à System.Web, cela renvoie un dictionnaire de typeIDictionary<string, string[]>
dans ASP.NET Core 1.x, ouIDictionary<string, StringValues>
dans ASP.NET Core 2.x ou version ultérieure, la valeur est donc une collection de chaînes. C'est ainsi que le dictionnaire gère plusieurs paramètres de chaîne de requête avec le même nom.Si vous souhaitez ajouter un paramètre à la chaîne de requête, vous pouvez utiliser une autre méthode sur
QueryHelpers
:En utilisant .net core 2.2, vous pouvez obtenir la chaîne de requête en utilisant
Vous obtiendrez une collection de paires clé: valeur - comme ceci
la source
Microsoft.AspNetCore.WebUtilities
place.Le moyen le plus simple et le plus intuitif de prendre un URI absolu et de manipuler sa chaîne de requête à l'aide de packages ASP.NET Core uniquement, peut être effectué en quelques étapes simples:
Installer des packages
PM> Package d'installation Microsoft.AspNetCore.WebUtilities
PM> Package d'installation Microsoft.AspNetCore.Http.Extensions
Classes importantes
Pour les signaler, voici les deux classes importantes que nous utiliserons: QueryHelpers , StringValues , QueryBuilder .
Le code
Pour vous tenir au courant de tout changement, vous pouvez consulter mon article de blog à ce sujet ici: http://benjii.me/2017/04/parse-modify-query-strings-asp-net-core/
la source
HttpRequest
a uneQuery
propriété qui expose la chaîne de requête analysée via l'IReadableStringCollection
interface:Cette discussion sur GitHub le souligne également.
la source
Cette fonction retourne
Dictionary<string, string>
et ne l'utilise pasMicrosoft.xxx
pour la compatibilitéAccepte le codage des paramètres des deux côtés
Accepte les clés en double (retourne la dernière valeur)
la source
Il est important de noter que depuis que la première réponse a été signalée comme correcte,
Microsoft.AspNetCore.WebUtilities
une mise à jour majeure de la version a été effectuée (de 1.xx à 2.xx).Cela dit, si vous construisez contre,
netcoreapp1.1
vous devrez exécuter ce qui suit, qui installe la dernière version prise en charge1.1.2
:Install-Package Microsoft.AspNetCore.WebUtilities -Version 1.1.2
la source
J'utilise ceci comme méthode d'extension, fonctionne avec n'importe quel nombre de paramètres:
Liens suivant et précédent par exemple dans une vue:
la source