En passant une liste de int à un HttpGet demande
J'ai une fonction similaire dans sa structure à ceci:
[HttpGet]
public HttpResponseMessage GetValuesForList(List<int> listOfIds)
{
/* create model */
foreach(var id in listOfIds)
model.Add(GetValueForId(id)
/* create response for model */
return response;
}
Cependant, lorsque je fais une requête Get pour la méthode:
{{domain}}/Controller/GetValuesForList?listOfIds=1&listOfIds=2
J'obtiens une erreur lors du débogage indiquant que listOfIds
est null. Dans notre contrôleur, nous avons un certain nombre de publics HttpGet méthodes qui fonctionnent bien, et en cas de changement de paramètre à un seul int il fonctionne. J'ai essayé de changer le type de paramètre à int[]
et IEnumerable<int>
trop, mais pas de changement.
Cependant, lors de la modification de l'appel à une HttpPost et le dépassement de la liste comme un x-www-form-urlencoded valeur, la méthode fonctionne.
Est-il possible de passer d'une liste à une méthode Get, ou devrai-je utiliser la Poste? Car il n'est pas vraiment une méthode post (car il renvoie un JSON modèle de valeurs et rien n'est enregistré sur le serveur).
- Jetez un oeil à cette réponse. L'envoi bits semble correct, la lecture peu besoin de quelques ajustements. Et un autre où tout semble simple.
- J'avais déjà tenté le deuxième lien que vous avez fourni avec pas de chance, mais le premier me conduisent à une méthode qui est une combinaison de l'adresse URL et la réponse par @C. B., auquel j'ai ajouté ci-dessous. Merci
Vous devez vous connecter pour publier un commentaire.
Si vous êtes en utilisant MVC WebAPI, vous pouvez déclarer votre méthode comme ceci:
et puis vous avez de la requête comme ceci:
blabla.com/GetTotalItemsInArray?listOfIds=1&listOfIds=2&listOfIds=3
cela va correspondre à tableau [1, 2, 3] en listOfIds param (et retour 3 comme prévu)
[FromUri]
, je ne peux pas construire mon projet. Il ditThe type or namespace name 'FromUri' could not be found
Voici un petit hack jusqu'à ce que vous trouver une meilleure solution:
Pour l'instant j'ai une combinaison de l'observation de @oleksii et la réponse de @C. B, mais à l'aide de TryParse de traiter avec des erreurs et un nul (à vérifier un paramètre facultatif.
Puisque les valeurs ne sont pas transmises à partir d'un formulaire, j'ai dû changer la réponse @oleksii liés à partir de ici à utiliser
Params
au lieu deForms
et combinées que la suggestion de @C. B. pour analyser la chaîne de valeurs de type int.Si cela permet pour le traditionnel
listOfIds=1&listOfIds=2
, il nécessite encore la conversion de chaînes en ints.Vous pouvez également passer le tableau sérialisé dans la chaîne de demande du client et de désérialiser sur le côté serveur:
Pour la chaîne de requête:
Et puis dans le côté serveur, juste désérialiser:
Vous disposez maintenant d'une liste d'identifiants que pourrait être analysée pour int.
Int32.TryParse(id, out result)