Aller au contenu principal

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 une vue 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

  1. Sous le projet Web.Mvc, clic droit sur le dossier controllers, Add -> Controller
  2. Nommez le contrôleur ComptesController
  3. Supprimez l'action Index ajoutée par défaut

Vous obtiendrez ceci:

Snowfall.Web.Mvc/Controllers/ComptesController.cs
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'inscription
  • POST /comptes : action d'inscription et de traitement des données du formulaire
info

Ce format de routes est en accord avec la convention des routes de type REST:

Verbe HTTPCheminController#Action
GET/controllercontroller#Index
GET/controller/newcontroller#New
POST/controllercontroller#Create
GET/controller/{id}controller#Show
GET/controller/{id}/editcontroller#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()]:

Snowfall.Web.Mvc/Controllers/ComptesController.cs
using Microsoft.AspNetCore.Mvc;

namespace Snowfall.Web.Mvc.Controllers;

[Route("[controller]")] // Préfixe d'URL /comptes
public class ComptesController : Controller
{

}
astuce

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

Snowfall.Web.Mvc/Controllers/ComptesController.cs
//...

// GET /comptes/new
[HttpGet("[action]")]
public IActionResult New()
{
return Ok();
}

//...
info

[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.

Snowfall.Web.Mvc/Controllers/ComptesController.cs
//...

// POST /comptes
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create()
{
return Ok();
}

//...
info

[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.