web-dev-qa-db-fra.com

Comment obtenir des paramètres GET avec ASP.NET MVC ApiController

Je me sens un peu absurde de demander cela, mais je ne trouve pas le moyen d’obtenir les paramètres d’une requête get à l’aide de /api/foo?sort=name par exemple.

Dans la classe ApiController, j'ai donné un public string Get(). Mettre Get(string sort) fait de /api/foo une requête incorrecte. L'instance de demande dans ApiController est de type System.Net.Http.HttpRequestMessage. Il n'a pas de propriété QueryString ou Parameters ou quoi que ce soit. 

24
xster

Vous pouvez simplement utiliser

HttpContext.Current.Request.QueryString
17
Josh Mouch

ApiController est conçu pour fonctionner sans l'objet HttpContext (ce qui le rend portable et lui permet d'être hébergé en dehors d'IIS).

Vous pouvez toujours accéder aux paramètres de la chaîne de requête, mais cela se fait via la propriété suivante:

Request.GetQueryNameValuePairs()

Voici un exemple de boucle à travers toutes les valeurs:

foreach (var parameter in Request.GetQueryNameValuePairs())
{
     var key = parameter.Key;
     var value = parameter.Value;
}
25
Darren

Voici un exemple qui obtient la chaîne de requête q de la demande et l'utilise pour interroger des comptes:

        var q = Request.GetQueryNameValuePairs().Where(nv => nv.Key =="q").Select(nv => nv.Value).FirstOrDefault();
        if (q != null && q != string.Empty)
        {
            var result = accounts.Where(a=>a.Name.ToLower().StartsWith(q.ToLower()));
            return result;
        }
        else
        {
            throw new Exception("Please specify a search query");
        }

Ceci peut être appelé alors comme ceci:

url/api/Comptes? q = p

6
Mark

Obtenez toutes les paires nom/valeur de chaîne de requête dans une variable:

IEnumerable<KeyValuePair<string, string>> queryString = request.GetQueryNameValuePairs();

Extrayez ensuite un paramètre de chaîne de requête spécifié

string value = queryString.Where(nv => nv.Key == "parameterNameGoesHere").Select(nv => nv.Value).FirstOrDefault();
3
Chris Halcrow

si nous avons un modèle approprié pour cette demande 

par exemple 

  public class JustModel 
    {
      public int Id {get;set;}
      public int Age {gets;set;}
    }

et requête comme ça 

/api/foo?id=1&Age=10

Vous pouvez simplement utiliser l'attribut [FromUri]

Par exemple 

public IHttpActionResult GetAge([FromUri] JustModel model){}
0
So_oP

Vous essayez de créer un service Web OData? Si tel est le cas, retournez simplement un IQueryable et l’API Web fera le reste.

0
Leon Cullens

Vous pouvez également utiliser les éléments suivants

var value = request.GetQueryNameValuePairs().Where(m => m.Key == "paramName").SingleOrDefault().Value;
0
Khateeb321