Comment puis-je transmettre plusieurs paramètres aux méthodes Get dans un contrôleur MVC 6. Par exemple, je veux pouvoir avoir quelque chose comme ce qui suit.
[Route("api/[controller]")]
public class PersonController : Controller
{
public string Get(int id)
{
}
public string Get(string firstName, string lastName)
{
}
public string Get(string firstName, string lastName, string address)
{
}
}
Donc je peux interroger comme.
api/person?id=1
api/person?firstName=john&lastName=doe
api/person?firstName=john&lastName=doe&address=streetA
c#
asp.net-core
asp.net-core-routing
mstrand
la source
la source
Pourquoi ne pas utiliser une seule action de contrôleur?
Une autre option consiste à utiliser le routage d'attributs, mais vous devrez alors avoir un format d'URL différent:
la source
Pour analyser les paramètres de recherche à partir de l'URL, vous devez annoter les paramètres de la méthode du contrôleur avec
[FromQuery]
, par exemple:la source
[HttpGet]
annotations supplémentaires , les différents noms de méthodes et l'itinéraire spécifique dans[Route]
- les routes devraient être pleinement explicites maintenant, ce qui élimine quelques problèmes possibles.Je pense que le moyen le plus simple est simplement d'utiliser
AttributeRouting
.la source
int paramOne, string paramTwo
Je suggérerais d'utiliser un objet dto séparé comme argument:
Dotnet mappera les champs à votre objet.
Cela rendra beaucoup plus facile le passage de vos paramètres et se traduira par un code beaucoup plus clair.
la source
Pour appeler get avec plusieurs paramètres dans le noyau de l'API Web
la source
Pour ajouter plus de détails sur la surcharge que vous avez posée dans votre commentaire après une autre réponse, voici un résumé. Les commentaires dans le
ApiController
montrent quelle action sera appelée avec chaqueGET
requête:Vous n'auriez besoin que d'un seul itinéraire pour cela, au cas où vous vous poseriez la question:
et vous pouvez tout tester avec cette vue MVC, ou quelque chose de similaire. Oui, je sais que vous n'êtes pas censé mélanger JavaScript avec du balisage et je n'utilise pas le bootstrap comme vous le feriez normalement, mais c'est uniquement à des fins de démonstration.
la source
NB-j'ai supprimé FromURI .Je peux toujours transmettre la valeur de l'URL et obtenir le résultat.Si quelqu'un connaît benfifts en utilisant fromuri, faites-le moi savoir
la source
Vous pouvez simplement faire ce qui suit:
Si vous devez accéder à chaque élément séparément, reportez-vous simplement à
Request.Query
.la source
Les méthodes devraient être comme ceci:
Notez que la deuxième méthode renvoie un tableau d'objets et que le nom du contrôleur est au pluriel (personnes et non personne).
Donc, si vous voulez obtenir une ressource par identifiant, ce sera:
si vous voulez prendre des objets selon certains critères de recherche comme le prénom, etc., vous pouvez effectuer une recherche comme ceci:
Et aller de l'avant si vous voulez prendre les commandes de cette personne (par exemple), cela devrait être comme ceci:
Et méthode dans le même contrôleur:
la source
la source
Le moyen le plus simple,
Manette:
Demande de facteur:
Point d'apprentissage: la demande de modèle exact sera acceptée par le contrôleur.
la source