Comment passer des paramètres aux méthodes d'action dans ASP.NET Core MVC

ASP.NET Core est une infrastructure multiplateforme, open source, allégée, rapide et modulaire pour la création d'applications Web hautes performances. Il existe plusieurs façons de transmettre des paramètres à des méthodes d'action dans ASP.NET Core MVC. Vous pouvez les transmettre via une URL, une chaîne de requête, un en-tête de requête, un corps de requête ou même un formulaire. Cet article décrit toutes ces méthodes et les illustre avec des exemples de code.

Pour utiliser les exemples de code fournis dans cet article, vous devez disposer de Visual Studio 2019 installé sur votre système. Si vous n'en avez pas déjà une copie, vous pouvez télécharger Visual Studio 2019 ici. 

Créer un projet ASP.NET Core MVC dans Visual Studio 2019

Tout d'abord, créons un projet ASP.NET Core dans Visual Studio 2019. En supposant que Visual Studio 2019 est installé sur votre système, suivez les étapes décrites ci-dessous pour créer un nouveau projet ASP.NET Core dans Visual Studio.

  1. Lancez l'IDE de Visual Studio.
  2. Cliquez sur "Créer un nouveau projet".
  3. Dans la fenêtre «Créer un nouveau projet», sélectionnez «Application Web ASP.NET Core» dans la liste des modèles affichés.
  4. Cliquez sur Suivant.
  5. Dans la fenêtre «Configurer votre nouveau projet», spécifiez le nom et l'emplacement du nouveau projet.
  6. Cochez éventuellement la case «Placer la solution et le projet dans le même répertoire», en fonction de vos préférences.
  7. Cliquez sur Créer.
  8. Dans la fenêtre «Créer une nouvelle application Web ASP.NET Core» affichée ci-dessous, sélectionnez .NET Core comme moteur d'exécution et ASP.NET Core 3.1 (ou version ultérieure) dans la liste déroulante en haut.
  9. Sélectionnez «Application Web (Model-View-Controller)» comme modèle de projet pour créer une nouvelle application ASP.NET Core MVC. 
  10. Assurez-vous que les cases à cocher «Activer le support Docker» et «Configurer pour HTTPS» ne sont pas cochées car nous n'utiliserons pas ces fonctionnalités ici.
  11. Assurez-vous que l'authentification est définie sur «Aucune authentification» car nous n'utiliserons pas non plus l'authentification.
  12. Cliquez sur Créer.

En suivant ces étapes, vous devez créer un nouveau projet ASP.NET Core MVC dans Visual Studio 2019. Nous utiliserons ce projet dans les sections ci-dessous pour illustrer les différentes méthodes de transmission de paramètres aux méthodes d'action dans ASP.NET Core 3.1.

Créer une classe AuthorRepository dans ASP.NET Core MVC

Dans cet exemple, nous utiliserons une classe de référentiel - les méthodes d'action du contrôleur interagiront avec les méthodes de la classe de référentiel pour les opérations CRUD. Nous allons d'abord créer une classe de modèle nommée Author avec des propriétés minimales par souci de simplicité, comme indiqué dans l'extrait de code ci-dessous.

    public class Auteur

    {

        public int Id {get; ensemble; }

        chaîne publique FirstName {get; ensemble; }

        chaîne publique LastName {get; ensemble; }

    }

La classe AuthorRepository contient des méthodes pour récupérer des instances de la classe Author à partir d'une liste générique ainsi que pour ajouter de nouvelles instances de la classe Author à la liste générique. La méthode GetAuthors renvoie une page de données, le numéro de page lui étant passé en argument.

    public class AuthorRepository

    {

        Liste des auteurs = nouvelle liste ()

        {

            nouvel auteur

            {

                Id = 1,

                FirstName = "Joydip",

                LastName = "Kanjilal"

            },

            nouvel auteur

            {

                Id = 2,

                Prénom = "Steve",

                LastName = "Smith"

            }

        };

        public Auteur GetAuthor (int id)

        {

            renvoie les auteurs.FirstOrDefault (a => a.Id == id);

        }

        Liste publique GetAuthors (int pageNumber = 1)

        {

            int pageSize = 10;

            int skip = pageSize * (pageNumber - 1);

            if (auteurs.Count <pageSize)

                pageSize = auteurs.Count;

            retour auteurs

              .Skip (sauter)

              .Take (pageSize) .ToList ();

        }

        public bool Save (Auteur auteur)

        {

            var result = auteurs.Where (a => a.Id == author.Id);

            if (résultat! = nul)

            {

                si (result.Count () == 0)

                {

                    auteurs.Ajouter (auteur);

                    retourne vrai;

                }

            }

            retourner faux;

        }

    }

Passer des paramètres via l'URL dans ASP.NET Core MVC

L'un des moyens les plus simples et les plus simples de transmettre des paramètres à une méthode d'action consiste à les transmettre via l'URL. L'extrait de code suivant montre comment vous pouvez transmettre des paramètres dans l'URL.

[HttpGet]

[Route ("Default / GetAuthor / {authorId: int}")]

public IActionResult GetAuthor (int authorId)

{

   var data = authorRepository.GetAuthor (authorId);

   retour Vue (données);

}

L'URL du point de terminaison est:

GET: // localhost: 8061 / Default / GetAuthor / 1

Passer des paramètres via une chaîne de requête dans ASP.NET Core MVC

La transmission de paramètres dans la chaîne de requête est une autre option. Il ne nécessite pas de modifier les informations de routage et est donc rétrocompatible. Considérez l'extrait de code suivant qui illustre comment vous pouvez passer des paramètres via des chaînes de requête dans une méthode d'action.

[HttpGet]

[Route ("Default / GetAuthors / {pageNumber: int}")]

public IActionResult GetAuthors ([FromQuery

(Name = "pageNumber")] int pageNumber = 1)

{

   var data = authorRepository.GetAuthors (pageNumber);

   retourne Ok (données);

}

Voici l'URL pour accéder à ce point de terminaison:

GET: // localhost: 8061 / Default / GetAuthors? PageNumber = 1

La méthode GetAuthors accepte le numéro de page en tant qu'argument qui lui est envoyé via une chaîne de requête. Notez que pageNumber est un paramètre facultatif - si aucun paramètre n'est passé à cette méthode, le numéro de page sera interprété comme 1. La méthode renvoie les enregistrements d'auteur pour la page spécifiée. Dans notre exemple, s'il y a 100 enregistrements d'auteur dans le magasin de données et que le numéro de page est 3, cette méthode renvoie les enregistrements 31 à 40. (Notez que le nombre d'auteurs par page est codé en dur; il est spécifié comme 10 dans le AuthorRepository.)

Passer des paramètres via l'en-tête de demande dans ASP.NET Core MVC

L'en-tête de demande est encore une autre option pour passer des paramètres à vos méthodes d'action. Un cas d'utilisation courant pour cela est la transmission d'informations d'identification ou de toute autre donnée secrète sur le fil. L'extrait de code suivant illustre une méthode d'action qui accepte un numéro de carte de crédit en tant que paramètre et renvoie true si le numéro de carte de crédit est valide.

[HttpGet]

[Route ("Default / IsCreditCardValid / {creditCardNumber}")]

public IActionResult IsCreditCardValid ([FromHeader] string creditCardNumber)

{

   string regexExpression =

   "^ (? :(? 4 [0-9] {12} (?: [0-9] {3})?) |" +

   "(? 5 [1-5] [0-9] {14}) |" +

   "(? 3 [47] [0-9] {13}) |) $";

   Regex regex = nouveau Regex (expression regex);

   var match = regex.Match (creditCardNumber);

   return Ok (match.Success);

}

Par souci de simplicité, la méthode d'action IsCreditCardValid valide uniquement les cartes de crédit Visa, MasterCard et Amex. Vous pouvez étendre la méthode IsCreditCardValid pour valider d'autres types de cartes. Étant donné que le numéro de carte de crédit doit être transmis en toute sécurité, l'utilisation de l'en-tête de demande est un bon choix ici. La figure 1 montre comment vous pouvez spécifier votre numéro de carte de crédit en tant que paramètre via l'en-tête de demande.

Passer des paramètres via le corps de la requête dans ASP.NET Core MVC

Vous devrez souvent transmettre des paramètres via le corps de la requête lorsque vous effectuez des opérations d'insertion ou de mise à jour. L'extrait de code suivant illustre comment vous pouvez transmettre une instance de la classe Author via le corps de la requête.

[HttpPost]

[Route ("Default / Insert")]

public IActionResult Insert ([FromBody] Auteur auteur)

{

   return Ok (authorRepository.Save (auteur));

}

La figure 2 montre comment vous pouvez spécifier les données à insérer dans le corps de la demande.

Code source complet de notre classe DefaultController

Le code complet de la classe DefaultController est fourni ci-dessous pour votre référence.

 public class DefaultController: Controller

    {

        privé en lecture seule AuthorRepository authorRepository =

        nouveau AuthorRepository ();

        [HttpGet]

        [Route ("Default / GetAuthor / {authorId: int}")]

        public IActionResult GetAuthor (int authorId)

        {

            var data = authorRepository.GetAuthor (authorId);

            retourne Ok (données);

        }

        [HttpGet]

        [Route ("Default / GetAuthors / {pageNumber: int}")]

        public IActionResult GetAuthors ([FromQuery

        (Name = "pageNumber")] int pageNumber = 1)

        {

            var data = authorRepository.GetAuthors (pageNumber);

            retourne Ok (données);

        }

        [HttpGet]

        [Route ("Default / IsCreditCardValid / {creditCardNumber}")]

        public IActionResult IsCreditCardValid

        ([FromHeader] chaîne creditCardNumber)

        {

            string regexExpression =

            "^ (? :(? 4 [0-9] {12} (?: [0-9] {3})?) |" +

            "(? 5 [1-5] [0-9] {14}) |" +

            "(? 3 [47] [0-9] {13}) |) $";

            Regex regex = nouveau Regex (expression regex);

            var match = regex.Match (creditCardNumber);

            return Ok (match.Success);

        }

        [HttpPost]

        [Route ("Default / Insert")]

        public IActionResult Insert ([FromBody] Auteur auteur)

        {

            return Ok (authorRepository.Save (auteur));

        }

    }

Enfin, vous pouvez également passer des paramètres via un formulaire. Un formulaire est souvent utilisé lorsque vous souhaitez télécharger un fichier. Dans ce cas, vous devrez profiter de l'interface IFormFile. 

Comment faire plus dans ASP.NET Core:

  • Comment utiliser les analyseurs d'API dans ASP.NET Core
  • Comment utiliser les jetons de données de route dans ASP.NET Core
  • Comment utiliser la gestion des versions d'API dans ASP.NET Core
  • Comment utiliser des objets de transfert de données dans ASP.NET Core 3.1
  • Comment gérer les erreurs 404 dans ASP.NET Core MVC
  • Comment utiliser l'injection de dépendances dans les filtres d'action dans ASP.NET Core 3.1
  • Comment utiliser le modèle d'options dans ASP.NET Core
  • Comment utiliser le routage de point de terminaison dans ASP.NET Core 3.0 MVC
  • Comment exporter des données vers Excel dans ASP.NET Core 3.0
  • Comment utiliser LoggerMessage dans ASP.NET Core 3.0
  • Comment envoyer des e-mails dans ASP.NET Core
  • Comment enregistrer des données sur SQL Server dans ASP.NET Core
  • Comment planifier des travaux à l'aide de Quartz.NET dans ASP.NET Core
  • Comment renvoyer des données à partir de l'API Web ASP.NET Core
  • Comment formater les données de réponse dans ASP.NET Core
  • Comment consommer une API Web ASP.NET Core à l'aide de RestSharp
  • Comment effectuer des opérations asynchrones à l'aide de Dapper
  • Comment utiliser les indicateurs de fonctionnalité dans ASP.NET Core
  • Comment utiliser l'attribut FromServices dans ASP.NET Core
  • Comment utiliser les cookies dans ASP.NET Core
  • Comment travailler avec des fichiers statiques dans ASP.NET Core
  • Comment utiliser le middleware de réécriture d'URL dans ASP.NET Core
  • Comment implémenter la limitation de débit dans ASP.NET Core
  • Comment utiliser Azure Application Insights dans ASP.NET Core
  • Utilisation des fonctionnalités NLog avancées dans ASP.NET Core
  • Comment gérer les erreurs dans l'API Web ASP.NET
  • Comment implémenter la gestion globale des exceptions dans ASP.NET Core MVC
  • Comment gérer les valeurs NULL dans ASP.NET Core MVC
  • Contrôle de version avancé dans l'API Web ASP.NET Core
  • Comment travailler avec les services de travail dans ASP.NET Core
  • Comment utiliser l'API de protection des données dans ASP.NET Core
  • Comment utiliser un middleware conditionnel dans ASP.NET Core
  • Comment travailler avec l'état de session dans ASP.NET Core
  • Comment écrire des contrôleurs efficaces dans ASP.NET Core