👹 Boss: Session Master
Bien que simple, il y a quelques lacunes dans l'implémentation actuelle de la session.
-
Lors de l'ajout au panier, faites en sorte que si l'item ajouté au panier n'existe pas dans la base de données, de retourner
BadRequest().[HttpPost]
public async Task<IActionResult> Create(PanierItemViewModel panierItem)
{
// 1. Vérifier que l'item à ajouter au panier existe bien (dans la bd)!
// 2. S'il est null, retourner `BadRequest()`
string itemSerialized = JsonSerializer.Serialize(panierItem);
HttpContext.Session.SetString("panier", itemSerialized);
return Ok();
}astuceVous aurez besoin de votre service d'événement! Ce service devrait déjà contenir une fonction vous permettant d'obtenir un événement par son
id. -
Lors de l'ajout d'un item au panier, faites en sorte de rediriger vers l'action
Indexdu panier plutôt que de retournerOk().astuceUtilisez la fonction
RedirectToAction(). Cette dernière prend deux arguments:- Le nom d'une action
- Le nom d'un contrôleur
-
Dans la vue
Indexdu panier, ajoutez un bouton, lié à une nouvelle action du contrôleur, qui permet de vider le panier.astuce- Vous pouvez utiliser un bouton dans un formulaire, effectuant une requête
POSTvers une nouvelle action du contrôleurPanier. - Comme vous aurez deux actions
POSTdans le même contrôleur, vous devrez donner à cette nouvelle action une URL différente. La façon la plus facile est de prendre le nom de l'action lors de la définition de la route. Par exemple:[HttpPost("[action]")] - La fonction
HttpContext.Session.Remove()permet de retirer une clé en particulier de la session.
- Vous pouvez utiliser un bouton dans un formulaire, effectuant une requête
-
Lorsqu'on récupère l'item du panier dans
Index(), il n'y a seulement qu'uniddans leViewModel. C'est normal, on ne veut pas stocker toutes les informations du produit dans le cookie (il y a une limite de taille au cookie!). Cependant, lors de l'affichage du panier, il nous faut ces informations supplémentaires, comme le nom de l'évéenement.- Créez une propriété optionnelle
Evenement? evenementdansPanierViewModelpour contenir l'événement derrière l'item de panier. - Dans
Index()récupérez le détail de l'événement à partir de sonidcontenu dans le panier. Assignez l'événement à la propriété optionnelle duViewModelpublic async Task<IActionResult> Index()
{
var panier = HttpContext.Session.GetString("panier");
if (panier != null)
{
var panierItem = JsonSerializer.Deserialize<PanierItemViewModel>(panier);
if (panierItem != null)
{
// Récupérer le détail de l'événement et assignez-le à la propriété optionnelle du `ViewModel`.
}
return View(panierItem);
}
return View();
}
astuceVous aurez besoin de votre service d'événement! Ce service devrait déjà contenir une fonction vous permettant d'obtenir un événement par son
id.- Assurez-vous d'être en mesure d'afficher quelques informations sur l'événement dans le panier.

- Créez une propriété optionnelle
