J'utilise l'API Web .Net MVC4 pour implémenter (espérons-le) une API RESTful. Je dois transmettre quelques paramètres au système et lui faire effectuer une action, puis renvoyer une liste d'objets en tant que résultats. Plus précisément, je passe deux dates et je renvoie les enregistrements qui se situent entre elles. Je garde également une trace des enregistrements renvoyés afin que les appels suivants ne soient pas retraités dans le système.
J'ai envisagé quelques approches:
Sérialisation des paramètres en une seule chaîne JSON et sélection de celle-ci dans l'API. http://forums.asp.net/t/1807316.aspx/1
Passez les paramètres dans la chaîne de requête.
Quelle est la meilleure façon de transmettre plusieurs paramètres de requête à une API reposante?Définition des paramètres de la route: api / controller / date1 / date2
En utilisant un POST qui me permet intrinsèquement de passer un objet avec des paramètres.
Recherche ODATA puisque l'API Web (actuellement) le prend en charge. Je n'ai pas encore fait grand chose avec cela, donc je ne suis pas très familier avec cela.
Il semble que les bonnes pratiques REST indiquent que lorsque les données sont extraites, vous devez utiliser un GET. Cependant, GET devrait également être nullipotent (ne produit aucun effet secondaire), et je me demande si mon implémentation spécifique viole cela puisque je marque des enregistrements dans le système API, donc je produis des effets secondaires.
Cela m'a également conduit à la question de la prise en charge des paramètres variables. Si la liste des paramètres d'entrée change, il serait fastidieux de redéfinir votre itinéraire pour le choix 3 si cela se produit souvent. Et que peut-il se passer si les paramètres sont définis au moment de l'exécution ...
Dans tous les cas, pour mon implémentation spécifique, quel choix (le cas échéant) me semble le mieux?
Je pense que le moyen le plus simple est simplement d'utiliser
AttributeRouting
.C'est évident dans votre contrôleur, pourquoi voudriez-vous cela dans votre
WebApiConfig
fichier Global ?Exemple:
Les
{}
noms doivent correspondre à vos paramètres.Aussi simple que cela, vous avez maintenant un autre
GET
qui gère plusieurs paramètres dans cette instance.la source
WebApiConfig
fichier, mais c'est en effet plus agréable.Route
pour les paramètres nommés (par exemple les paramètres de requête)?Ajoutez simplement un nouvel itinéraire aux
WebApiConfig
entrées.Par exemple, pour appeler:
ajouter:
Ajoutez ensuite les paramètres à l'appel HTTP:
la source
api/controller?start=date1&end=date2
URI de style.Je devais juste implémenter une API RESTfull où je devais passer des paramètres. Je l'ai fait en passant les paramètres dans la chaîne de requête dans le même style que celui décrit par le premier exemple de Mark "api / controller? Start = date1 & end = date2"
Dans le contrôleur, j'ai utilisé une astuce de l' URL fractionnée en C #?
Dans mon cas, j'appelais le WebApi via Ajax ressemblant à:
J'espère que ça aide...
la source
J'ai trouvé une excellente solution sur http://habrahabr.ru/post/164945/
la source
Get
), pouvez-vous toujours utiliser[FromUri]
? Je n'arrive pas à faire fonctionner ça.L'utilisation de GET ou POST est clairement expliquée par @LukLed . En ce qui concerne les façons dont vous pouvez passer les paramètres, je suggérerais d'utiliser la deuxième approche (je ne sais pas grand-chose non plus sur ODATA ).
Ce n'est pas convivial et convivial pour le référencement
Il s'agit de l'approche généralement préférable.
Ce n'est certainement pas une bonne approche. Cela donne l'impression que quelqu'un
date2
est une ressource secondairedate1
et ce n'est pas le cas. Les deuxdate1
etdate2
sont des paramètres de requête et sont au même niveau.Dans le cas simple, je suggérerais un URI comme celui-ci,
Mais j'aime personnellement le modèle d'URI ci-dessous, mais dans ce cas, nous devons écrire du code personnalisé pour mapper les paramètres.
la source
Utilisez la liaison de paramètres comme décrit complètement ici: http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api
la source
Les deux paramètres du lien racine ({un}, {deux}) et les paramètres de la fonction Get (un, deux) doivent être identiques
la source
Je sais que c'est vraiment vieux, mais je voulais la même chose récemment et voici ce que j'ai trouvé ...
Alors maintenant dans votre adresse / URI / ...
http (s): // myURL / api / myController /? var = getnew & test = test
Résultat: "Test trouvé"
http (s): // myURL / api / myController /? var = getnew & test = quelque chose
Résultat: "Impossible de trouver ce test"
la source
Vous pouvez maintenant le faire en utilisant simplement
cela renverra: "valeur: 5 10"
si vous l' appelez avec https: // yourdomain / api / yourcontroller? id = 5 & abc = 10
la source
la source