20-1 Contrôleur pour les comptes (inscription)
Pour la création de comptes, soit l'inscription au site, un contrôleur sera nécessaire. En effet, on veut au minimum 1 vue et deux actions:
- Une
actionet unevued'inscription qui affiche le formulaire - Une
actionresponsable de traiter la soumission du formulaire d'inscription
Le contrôleur aura donc deux actions:
- Une action associée à
HTTP GETpour afficher le formulaire - Une action associée à
HTTP POSTpour traiter les données du formulaire
Créer le contrôleur ComptesController
- Sous le projet
Web.Mvc,clic droitsur le dossiercontrollers,Add->Controller - Nommez le contrôleur
ComptesController - Supprimez l'action
Indexajoutée par défaut
Vous obtiendrez ceci:
using Microsoft.AspNetCore.Mvc;
namespace Snowfall.Web.Mvc.Controllers;
public class ComptesController : Controller
{
}
Préfixe de route /comptes
Nous voudrons que ce contrôleur puisse afficher un formulaire d'inscription et créer un nouveau compte, soit 2 actions:
GET/comptes/new: affiche le formulaire d'inscriptionPOST/comptes: action d'inscription et de traitement des données du formulaire
Ce format de routes est en accord avec la convention des routes de type REST:
| Verbe HTTP | Chemin | Controller#Action |
|---|---|---|
| GET | /controller | controller#Index |
| GET | /controller/new | controller#New |
| POST | /controller | controller#Create |
| GET | /controller/{id} | controller#Show |
| GET | /controller/{id}/edit | controller#Edit |
| PATCH/PUT | /controller/{id} | controller#Update |
| DELETE | /controller/{id} | controller#Delete |
Les deux actions auront comme chemin d'accès de base comptes.
Spécifiez ce préfixe (/comptes) dans le contrôleur via l'attribut [Route()]:
using Microsoft.AspNetCore.Mvc;
namespace Snowfall.Web.Mvc.Controllers;
[Route("[controller]")] // Préfixe d'URL /comptes
public class ComptesController : Controller
{
}
L'utilisation de [Route("[controller]")] comme paramètre est l'équivalent d'écrire [Route("[comptes]")].
Le framework remplacera automatiquement [controller] par le nom du contrôleur. C'est un raccourci pratique qui permet d'être plus flexible dans le cas où nous changerions le nom du contrôleur: le préfixe des routes associées serait automatiquement modifié par la même occasion.
Créer l'action New (GET /comptes/new)
L'action New sera responsable d'afficher le formulaire de création d'un nouveau compte
//...
// GET /comptes/new
[HttpGet("[action]")]
public IActionResult New()
{
return Ok();
}
//...
[HttpGet("[action]")] est l'équivalent d'écrire [HttpGet("new")], soit le nom de l'action (fonction).
Via [HttpGet("[action]")], on dit que le chemin (route) GET /comptes/new sera associé à cette action.
La fonction n'est pas asynchrone (async) dans ce cas-ci puisqu'on ne fera que retourner une vue, nous n'aurons pas à attendre après une requête de base de données ou quelque chose du genre.
Créer l'action Create (POST /comptes)
L'action Create, pour sa part, est responsable de recevoir les données POST du formulaire. Selon la convention REST, cette action se fait directement sur la collection de la ressource, soit /comptes.
//...
// POST /comptes
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create()
{
return Ok();
}
//...
[HttpPost()], sans aucun paramètre, est l'équivalent d'utiliser le chemin d'accès de base définit par le contrôleur.
Ici, c'est comme dire POST /comptes.
La fonction est asynchrone (async) puisque nous ferons bientôt appel à la base de données pour sauvegarder des données.
De plus, on vérifie le jeton du formulaire avec [ValidateAntiForgeryToken].
Exécuter le projet
Vous devriez pouvoir compiler et exécuter le projet, puis vous rendre à l'URL /comptes/new. Vous verrez une page blanche puisque seulement un résultat 200 OK est retourné par l'action.