J'utilise le modèle par défaut généré par Asp.net Web Api. Je travaille avec la partie Get ():
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
Pour une raison quelconque, je pensais que la seule chose que vous deviez faire pour accéder à la chaîne de requête était simplement de créer une variable de chaîne d'entrée. J'ai donc créé une fonction supplémentaire (la seule modification que j'ai apportée) au contrôleur par défaut généré:
public IEnumerable<string> Get(string queryString)
{
return new string[] { "value3", "value4" };
}
J'ai mis un point d'arrêt dans les deux méthodes, mais même si j'ajoute une chaîne de requête, il va toujours à la fonction sans paramètres. Donc, si je vais à http://mybaseurl/api/values?foo=f
, Il va toujours à Get () au lieu de get (string queryString). Ça ne marche pas comme je le pensais? Je sais que je peux accéder à la chaîne de requête dans la fonction Get () en utilisant Request.RequestUri.ParseQueryString();
mais je préfère la séparer comme ceci si possible.
Le nom de clé de la chaîne de requête doit correspondre au nom du paramètre de l'action:
/ api/values? queryString = f
public IEnumerable<string> Get(string queryString)
{
return new string[] { "value3", "value4" };
}
Même si @ Kiran Challa la réponse est correcte, il y a peu de situations que vous préféreriez obtenir les paramètres d'URL directement à partir de l'URL. dans ces scénarios, essayez ceci:
using System.Net.Http;
var allUrlKeyValues = ControllerContext.Request.GetQueryNameValuePairs();
string p1Val = allUrlKeyValues.LastOrDefault(x => x.Key == "p1").Value;
string p2Val = allUrlKeyValues.LastOrDefault(x => x.Key == "p2").Value;
string p3Val = allUrlKeyValues.LastOrDefault(x => x.Key == "p3").Value;
Maintenant, pour l'URL suivante, p1Val sera "Apple", p2Val sera "Banana" et p3Val sera null.
.../api/myController?p1=Apple&p2=Banana
Merci pour les suggestions, maintenant, le code source de ce test est dans GitHub et il s'exécute également et peut être testé sur Azure: