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
action
et unevue
d'inscription qui affiche le formulaire - Une
action
responsable de traiter la soumission du formulaire d'inscription
Le contrôleur aura donc deux actions:
- Une action associée à
HTTP GET
pour afficher le formulaire - Une action associée à
HTTP POST
pour traiter les données du formulaire
Créer le contrôleur ComptesController
- Sous le projet
Web.Mvc
,clic droit
sur le dossiercontrollers
,Add
->Controller
- Nommez le contrôleur
ComptesController
- Supprimez l'action
Index
ajouté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.