219 votes

Comment lire les valeurs de la chaîne de requête avec ASP.NET Core?

Je suis en train de construire une API RESTful à l'aide de ASP.NET Core, MVC, et je veux utiliser querystring paramètres pour spécifier le filtrage et d'échange sur une ressource qui renvoie une collection.

Dans ce cas, j'ai besoin de lire les valeurs transmises dans la chaîne de requête pour filtrer et sélectionner les résultats à retourner.

J'ai déjà constaté qu'à l'intérieur du contrôleur Get action accédant HttpContext.Request.Query renvoie un IQueryCollection.

Le problème est que je ne sais pas comment il est utilisé pour récupérer les valeurs. En vérité, j'ai pensé à la façon de le faire est par le biais, par exemple

string page = HttpContext.Request.Query["page"]

Le problème est qu' HttpContext.Request.Query["page"] ne retourne pas une chaîne, mais un StringValues.

De toute façon, comment peut-on utiliser l' IQueryCollection de lire la querystring valeurs?

198voto

Mike_G Points 4519

Vous pouvez utiliser [FromQuery] pour lier un modèle particulier à la chaîne de requête:

https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding

par exemple

 [HttpGet()]
public IActionResult Get([FromQuery(Name = "page")] string page)
{...}
 

140voto

Darin Dimitrov Points 528142

Vous pouvez utiliser la méthode ToString sur IQueryCollection qui renverra la valeur souhaitée si un seul paramètre page est spécifié:

 string page = HttpContext.Request.Query["page"].ToString();
 

s'il existe plusieurs valeurs telles que ?page=1&page=2 le résultat de l'appel ToString sera 1,2

Mais comme l'a suggéré @ mike-g dans sa réponse, vous feriez mieux d'utiliser la liaison de modèle et de ne pas accéder directement à l'objet HttpContext.Request.Query .

57voto

spottedmahn Points 4439

ASP.NET Noyau va se lier automatiquement form values, route values et query strings par nom. Cela signifie que vous pouvez simplement faire ceci:

[HttpGet()]
public IActionResult Get(int page)
{ ... }

MVC va essayer de lier demande de données pour les paramètres de l'action par son nom ... ci-dessous est une liste des sources de données dans l'ordre dans lequel la liaison de modèle regarde à travers eux

  1. Form values: Ce sont les valeurs d'un formulaire qui vont dans la requête HTTP à l'aide de la méthode POST. (y compris jQuery requêtes POST).

  2. Route values: L'ensemble de l'itinéraire valeurs fournies par le Routage

  3. Query strings: La partie de chaîne de requête de l'URI.

Source: Comment le modèle de la liaison fonctionne


Pour info, vous pouvez également combiner la recherche automatique et explicite approches:

[HttpGet()]
public IActionResult Get(int page
     , [FromQuery(Name = "page-size")] int pageSize)
{ ... }

37voto

Pavel Points 148

Voici un exemple de code que j'ai utilisé (avec une vue .NET Core):

 @{
    Microsoft.Extensions.Primitives.StringValues queryVal;

    if (Context.Request.Query.TryGetValue("yourKey", out queryVal) &&
        queryVal.FirstOrDefault() == "yourValue")
    {
    }
}
 

8voto

Sharknado Points 68

IQueryCollection a un TryGetValue() qui renvoie une valeur avec la clé donnée. Donc, si vous aviez un paramètre de requête appelé someInt , vous pourriez l'utiliser comme ceci:

 var queryString = httpContext.Request.Query;
StringValues someInt;
queryString.TryGetValue("someInt", out someInt);
var daRealInt = int.Parse(someInt);
 

Notez que sauf si vous avez plusieurs paramètres du même nom, le type StringValues n'est pas un problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X