Analyser et modifier une chaîne de requête dans .NET de Base
Je me suis donné un URI absolu qui contient une chaîne de requête. Je suis à la recherche sécuritaire pour ajouter une valeur à la chaîne de requête, et de modifier un paramètre existant.
Je préfère ne pas virer de bord sur les &foo=bar
, ou utiliser des expressions régulières, échappement d'URI est délicate. Plutôt je veux utiliser un mécanisme intégré qui je sais va le faire correctement et de traiter la de s'échapper.
J'ai trouvé un tonne de réponses que tous les HttpUtility
. Toutefois, cela étant ASP.NET de Base, il n'existe plus de Système.Web de l'assemblée plus, donc pas plus HttpUtility
.
Quel est le moyen le plus approprié pour ce faire, dans ASP.NET de Base tout en ciblant le noyau d'exécution?
- Une alternative à
Microsoft.AspNet.WebUtilties
peut-être laMono.HttpUtility
bibliothèque. - J'ai écrit un post pour la même chose, jetez un oeil ici: neelbhatt40.wordpress.com/2017/07/06/...
- Mise à jour de 2017: .NET Core 2.0 inclut désormais
HttpUtility
etParseQueryString
méthode.
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez ASP.NET Core 1 ou 2, vous pouvez le faire avec
Microsoft.AspNetCore.WebUtilities.QueryHelpers
dans le Microsoft.AspNetCore.WebUtilities paquet.Si vous utilisez ASP.NET Core 3.0 ou supérieure,
WebUtilities
fait maintenant partie de la ASP.NET SDK et n'a pas besoin d'un package nuget de référence.À analyser dans un dictionnaire:
Noter que, contrairement à
ParseQueryString
dans le Système.Web, il renvoie un dictionnaire de typeIDictionary<string, string[]>
dans ASP.NET Core 1.x, ouIDictionary<string, StringValues>
dans ASP.NET Core 2.x ou plus, de sorte que la valeur est un ensemble de chaînes de caractères. De cette façon, le dictionnaire des poignées de multiples 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
:À l'aide .net core 2.2 vous pouvez obtenir la chaîne de requête à l'aide de
Vous obtiendrez une collection des principales paires de valeur: - comme ce
Microsoft.AspNetCore.WebUtilities
à la place.La plus simple et la plus intuitive pour prendre un URI absolu et le manipuler la chaîne de requête à l'aide de ASP.NET les packages de Base seulement, peut être fait en quelques étapes faciles:
Installer Des Paquets
H> Install-Package Microsoft.AspNetCore.WebUtilities
H> Install-Package Microsoft.AspNetCore.Http.Extensions
Important Classes
Juste pour signaler, ici, sont les deux classes que nous allons utiliser: QueryHelpers, Les valeurs de type string, QueryBuilder.
Le Code
À tenir à jour avec toutes les modifications, vous pouvez consulter mon blog à ce sujet ici: http://benjii.me/2017/04/parse-modify-query-strings-asp-net-core/
HttpRequest
a unQuery
propriété qui expose l'analyse de la chaîne de requête via leIReadableStringCollection
interface:Cette discussion sur GitHub points à lui aussi bien.
Cette fonction retourne
Dictionary<string, string>
et ne pas utiliserMicrosoft.xxx
pour la compatibilitéAccepte d'encodage des paramètres dans les deux côtés
Accepte les doubles de clés (retourne la dernière valeur)
Il est important de noter que, dans le temps puisque la première réponse a été identifiée comme étant correcte que
Microsoft.AspNetCore.WebUtilities
a eu une mise à jour majeure (à partir de 1.x.x à 2.x.x).Cela dit, si vous êtes la construction de contre
netcoreapp1.1
vous devez exécuter les opérations suivantes, qui installe la dernière version prise en charge1.1.2
:Install-Package Microsoft.AspNetCore.WebUtilities -Version 1.1.2
- Je utiliser ce que l'extension de la méthode, fonctionne avec n'importe quel nombre de paramètres:
Next et prev liens par exemple dans une vue: