12. Conclusion
Ce document a présenté la construction d'une application web MVC avec le framework [ASP.NET Core MVC] : une application dont les pages HTML sont fabriquées par le serveur, avec des vues [Razor], sans framework [JavaScript] côté navigateur. Il a suivi pas à pas la progression du cours [NestJS], lui-même issu du cours Introduction à ASP.NET MVC par l'exemple : des contrôleurs et du routage vers les vues, les formulaires, l'internationalisation, la sécurité et l'accès aux données, puis une étude de cas complète.
La boucle est ainsi bouclée : on revient à la plate-forme [.NET] du cours d'origine, dans sa version moderne. Les correspondances entre les trois frameworks sont nombreuses :
ASP.NET MVC (2013) | NestJS (2026) | ASP.NET Core MVC (2026) |
contrôleur, action ([ActionResult]) | [@Controller], [@Get], [@Post] | [Controller], [[HttpGet]], [[HttpPost]], [IActionResult] |
modèle d'action, [[Required]], [[Range]]... | classe DTO, décorateurs de [class-validator] | liaison de modèle, [[Required]], [[Range]]... (inchangés) |
[ModelState.IsValid] | [validate()] et réaffichage du formulaire | [ModelState.IsValid] et réaffichage du formulaire |
vues [Razor] ([.cshtml]), [_Layout.cshtml] | vues [Handlebars] ([.hbs]), [layout.hbs] | vues [Razor] ([.cshtml]), [_Layout.cshtml], [_ViewStart.cshtml] |
vues partielles, helpers HTML | partiels [{{> nom}}], helpers | vues partielles, méthodes C#, Tag Helpers, classe mère des vues |
[TempData] (dans la session) | message flash dans un cookie | [TempData] (dans un cookie chiffré) |
session | cookies (jeton JWT, langue) : serveur sans état | cookies (jeton JWT, langue) : serveur sans état |
filtres d'action, [[Authorize]] | middlewares, gardes, intercepteurs, filtres | middlewares, filtres, [[Authorize(Roles = ...)]], [JwtBearer] |
fichiers de ressources ([.resx]) | dictionnaires JSON, helper [t] | dictionnaires JSON, [@T(...)], [UseRequestLocalization] |
[Entity Framework] | [TypeORM] | [Entity Framework Core] |
injection de dépendances (bibliothèque tierce) | modules, [@Injectable] | intégrée : [AddSingleton], [AddScoped], [AddTransient] |
Par rapport à [NestJS], on retiendra surtout :
- le typage de [C#] est vérifié jusqu'au bout : un paramètre d'action déclaré [int] est réellement converti en entier, une vue déclare le type de son modèle ([@model]) et une faute de frappe dans une vue est une erreur de compilation ;
- beaucoup de choses sont fournies par le framework sans bibliothèque supplémentaire : validation, messages flash ([TempData]), localisation, pages d'erreur, injection de dépendances ;
- [Razor] autorise du code [C#] dans les vues : c'est un confort, qui demande de la discipline pour que les vues restent de simples mises en forme.
L'étude de cas montre qu'une application HTML classique, sans [JavaScript] indispensable, reste une solution simple et robuste : chaque page est une URL, le bouton « précédent » du navigateur fonctionne, et le serveur contrôle tout. Le peu de [JavaScript] utilisé (les fenêtres de confirmation) améliore le confort sans être nécessaire au fonctionnement.
Pour aller plus loin, on pourra consulter la documentation d'[ASP.NET Core] (learn.microsoft.com/aspnet/core) et celle d'[Entity Framework Core] (learn.microsoft.com/ef/core), et comparer cette application à sa sœur [NestJS].