3-2 Routes de type REST
Peut-être vous souvenez-vous qu'en Web III, nous utilisions des routes de type REST, c'est-à-dire au format suivant:
Verbe HTTP | Chemin | Controller#Action |
---|---|---|
GET | /evenements | Evenements#Index |
GET | /evenements/new | Evenements#New |
POST | /evenements | Evenements#Create |
GET | /evenements/{id} | Evenements#Show |
GET | /evenements/{id}/edit | Evenements#Edit |
PATCH/PUT | /evenements/{id} | Evenements#Update |
DELETE | /evenements/{id} | Evenements#Delete |
Le format général d'un chemin d'accès vers une page était:
/ressource/{id}
ou/ressource/{id}/action
dans le cas où un paramètre est présent/ressource
ou/ressource/action
sans paramètre
Or, le chemin standard proposé par .NET MVC ne correspond pas tout à fait à ce format. On a plutôt
/ressource/action/{id}
(paramètre à la fin plutôt qu'entre ressource et action)
Suivant la convention REST, dans le cas de Show()
, on devrait simplement être en mesure d'accéder à:
/evenements/{id}
Pas besoin de préciser Show
dans l'URL.
Heureusement, il est possible de préciser, pour une route, le format désiré.
Préciser le format de route pour une action
Modifions la route associée à Show pour qu'elle se conforme au standard REST.
-
Préciser le format. Modifiez l'action pour y ajouter la ligne
[HttpGet("evenements/{id:int}")]
:Snowfall.Web.Mvc/Controllers/EvenementsController.cs[HttpGet("evenements/{id:int}")]
public IActionResult Show(int id)
{
return Content("Vue Show de EvenementsController, id: " + id);
}infoEn C#, ce que vous voyez entre crochets (
[]
) est appelé unattribut
(https://learn.microsoft.com/en-us/dotnet/csharp/advanced-topics/reflection-and-attributes/) et permet d'associer des métadonnées à une classe ou une fonction. Les données passées via ses attributs peuvent ensuite être utilisées par l'application pour modifier le comportement de cette dernière. Ici on s'en sert pour donner plus d'information sur la route associée à l'action.astuce.NET Core MVC nous permet de définir des routes associées à nos actions en utilisant les verbes HTTP GET/POST/etc. Il est possible d'utiliser:
[HttpGet]
[HttpPost]
[HttpPut]
[HttpDelete]
[HttpHead]
[HttpPatch]Ensuite, on passe en paramètre le
template
de la route (gabarit identifiant son chemin d'accès.) -
Lancez l'application et dirigez-vous vers le chemin d'accès
/evenements/1
.Vous devriez voir ceci:
http://localhost:5155/evenements/1Vue Show de EvenementsController, id: 1
Beaucoup plus élégant et conforme à REST!
Interpolation de string en C#
À noter que plutôt que de concaténer les chaines de caractère à l'aide du "+", il est possible d'utiliser l'interpolation de string, de la même façon qu'en TypeScript. La même personne a designé les deux langages! ;)
[HttpGet("evenements/{id:int}")]
public IActionResult Show(int id)
{
return Content($"Vue Show de EvenementsController, id: {id}");
}