From 8acafbfe496b593162768cfa18299a0143d862ab Mon Sep 17 00:00:00 2001 From: mirage <119869686+ClementBobin@users.noreply.github.com> Date: Thu, 2 Apr 2026 15:57:52 +0200 Subject: [PATCH 01/10] =?UTF-8?q?refactor:=20simplifier=20les=20actions=20?= =?UTF-8?q?du=20contr=C3=B4leur=20en=20supprimant=20les=20contr=C3=B4les?= =?UTF-8?q?=20ModelState=20redondants=20et=20en=20am=C3=A9liorant=20la=20r?= =?UTF-8?q?=C3=A9cup=C3=A9ration=20des=20donn=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ArtisteController.cs | 19 +---- .../Controllers/CommentaireController.cs | 3 + .../Controllers/DashboardController.cs | 2 +- .../Controllers/StyleController.cs | 11 --- .../Controllers/TitreController.cs | 18 +---- .../Controllers/AccueilController.cs | 1 + .../Controllers/ApiController.cs | 5 +- .../Controllers/ArtisteController.cs | 4 + .../Controllers/RechercheController.cs | 9 +++ .../Controllers/TitreController.cs | 10 +-- .../Filters/GlobalExceptionFilter.cs | 42 +++++++++++ .../Filters/ValidationActionFilter.cs | 73 +++++++++++++++++++ Webzine.WebApplication/Program.cs | 11 ++- .../Views/Titre/Index.cshtml | 5 +- .../Views/Titre/Style.cshtml | 4 +- Webzine.WebApplication/nlog.config | 2 +- 16 files changed, 158 insertions(+), 61 deletions(-) create mode 100644 Webzine.WebApplication/Filters/GlobalExceptionFilter.cs create mode 100644 Webzine.WebApplication/Filters/ValidationActionFilter.cs diff --git a/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs b/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs index e6ad7e5..89cbbfb 100644 --- a/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs +++ b/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs @@ -37,11 +37,9 @@ public class ArtisteController : Controller /// Redirection. public IActionResult Index() { - IEnumerable artistes = this.artisteRepository.FindAll(); + IEnumerable artistes = this.artisteRepository.FindAll().OrderBy(t => t.Nom); - var artistes_ordre = artistes.OrderBy(t => t.Nom).ToList(); - - return this.View(artistes_ordre); + return this.View(artistes); } /// @@ -61,14 +59,6 @@ public class ArtisteController : Controller [HttpPost] public IActionResult Create(ArtisteCreateViewModel model) { - // vérifier si les données sont corrects. - if (!this.ModelState.IsValid) - { - // Passer model en paramètre afin que - // l'utilisateur conserve sa saissie. - return this.View(model); - } - // Créer un objet Artiste avecc les paramètres. var artiste = new Artiste { @@ -115,11 +105,6 @@ public class ArtisteController : Controller Biographie = model.Biographie, }; - if (!this.ModelState.IsValid) - { - return this.View(artiste); - } - this.artisteRepository.Update(artiste); return this.RedirectToAction("Index"); diff --git a/Webzine.WebApplication/Areas/Administration/Controllers/CommentaireController.cs b/Webzine.WebApplication/Areas/Administration/Controllers/CommentaireController.cs index b954e14..cca385a 100644 --- a/Webzine.WebApplication/Areas/Administration/Controllers/CommentaireController.cs +++ b/Webzine.WebApplication/Areas/Administration/Controllers/CommentaireController.cs @@ -5,6 +5,9 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers using Webzine.Repository.Contracts; using Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire; + /// + /// + /// [Area("Administration")] public class CommentaireController : Controller { diff --git a/Webzine.WebApplication/Areas/Administration/Controllers/DashboardController.cs b/Webzine.WebApplication/Areas/Administration/Controllers/DashboardController.cs index 97f1721..213498f 100644 --- a/Webzine.WebApplication/Areas/Administration/Controllers/DashboardController.cs +++ b/Webzine.WebApplication/Areas/Administration/Controllers/DashboardController.cs @@ -31,7 +31,7 @@ public class DashboardController : Controller /// La vue Index du tableau de bord. public IActionResult Index() { - DashboardDTO data = dashboardService.GetDashboardData(); + DashboardDTO data = this.dashboardService.GetDashboardData(); return this.View(data); } diff --git a/Webzine.WebApplication/Areas/Administration/Controllers/StyleController.cs b/Webzine.WebApplication/Areas/Administration/Controllers/StyleController.cs index 1283fd0..578cf4d 100644 --- a/Webzine.WebApplication/Areas/Administration/Controllers/StyleController.cs +++ b/Webzine.WebApplication/Areas/Administration/Controllers/StyleController.cs @@ -63,11 +63,6 @@ public class StyleController : Controller [HttpPost] public IActionResult Create(StyleCreateViewModel model) { - if (!this.ModelState.IsValid) - { - return this.View(model); - } - var style = new Style { Libelle = model.Libelle, @@ -124,7 +119,6 @@ public class StyleController : Controller /// /// L'identifiant du style a editer. /// La vue d'edition ou une redirection vers l'index si le style n'existe pas. - [HttpGet] public IActionResult Edit(int id) { var style = this.styleRepository.Find(id); @@ -151,11 +145,6 @@ public class StyleController : Controller [HttpPost] public IActionResult Edit(StyleEditViewModel model) { - if (!this.ModelState.IsValid) - { - return this.View(model); - } - var style = this.styleRepository.Find(model.IdStyle); if (style == null) { diff --git a/Webzine.WebApplication/Areas/Administration/Controllers/TitreController.cs b/Webzine.WebApplication/Areas/Administration/Controllers/TitreController.cs index f808dda..d6952f2 100644 --- a/Webzine.WebApplication/Areas/Administration/Controllers/TitreController.cs +++ b/Webzine.WebApplication/Areas/Administration/Controllers/TitreController.cs @@ -95,13 +95,8 @@ public class TitreController : Controller [HttpPost] public IActionResult Create(TitreAdminDTO model) { - if (this.ModelState.IsValid) - { - this.titreAdminService.CreerTitre(model); - return this.RedirectToAction("Index"); - } - - return this.View(model); + this.titreAdminService.CreerTitre(model); + return this.RedirectToAction("Index"); } /// @@ -152,13 +147,8 @@ public class TitreController : Controller [HttpPost] public IActionResult Edit(TitreAdminDTO model) { - if (this.ModelState.IsValid) - { - this.titreAdminService.ModifierTitre(model); - return this.RedirectToAction("Index"); - } - - return this.View(model); + this.titreAdminService.ModifierTitre(model); + return this.RedirectToAction("Index"); } /// diff --git a/Webzine.WebApplication/Controllers/AccueilController.cs b/Webzine.WebApplication/Controllers/AccueilController.cs index 4d15d99..0efbd59 100644 --- a/Webzine.WebApplication/Controllers/AccueilController.cs +++ b/Webzine.WebApplication/Controllers/AccueilController.cs @@ -21,6 +21,7 @@ /// /// Service de journalisation injecté pour enregistrer les événements et les erreurs. /// Service d'injection de configuration pour accéder aux paramètres de l'application. + /// public AccueilController( ILogger logger, IConfiguration configuration, diff --git a/Webzine.WebApplication/Controllers/ApiController.cs b/Webzine.WebApplication/Controllers/ApiController.cs index 0327185..5f045f7 100644 --- a/Webzine.WebApplication/Controllers/ApiController.cs +++ b/Webzine.WebApplication/Controllers/ApiController.cs @@ -2,12 +2,14 @@ namespace Webzine.WebApplication.Controllers; using Microsoft.AspNetCore.Mvc; +/// +/// Controller de version de l'API. +/// public class ApiController : ControllerBase { private readonly ILogger logger; /// - /// Initializes a new instance of the class. /// Initialise une nouvelle instance de la classe . /// /// Service de journalisation injecté pour enregistrer les événements et les erreurs. @@ -21,7 +23,6 @@ public class ApiController : ControllerBase /// Endpoint de test pour vérifier que l'API fonctionne correctement. Retourne un objet JSON contenant le nom et la version de l'application. /// /// Un objet JSON avec les propriétés "nom" et "version". - [HttpGet] public IActionResult Version() { this.logger.LogInformation("Get Version was called"); diff --git a/Webzine.WebApplication/Controllers/ArtisteController.cs b/Webzine.WebApplication/Controllers/ArtisteController.cs index ef5781b..f3cb9ba 100644 --- a/Webzine.WebApplication/Controllers/ArtisteController.cs +++ b/Webzine.WebApplication/Controllers/ArtisteController.cs @@ -5,6 +5,9 @@ using Webzine.Repository.Contracts; using Webzine.WebApplication.ViewModels.Artiste; + /// + /// + /// public class ArtisteController : Controller { // Injection du logger via le constructeur @@ -16,6 +19,7 @@ /// Initialise une nouvelle instance du . avec un service de journalisation injecté. /// /// Service de journalisation injecté pour enregistrer les événements et les erreurs. + /// public ArtisteController( ILogger logger, IArtisteRepository artisteRepository) diff --git a/Webzine.WebApplication/Controllers/RechercheController.cs b/Webzine.WebApplication/Controllers/RechercheController.cs index 2070c8c..27027c0 100644 --- a/Webzine.WebApplication/Controllers/RechercheController.cs +++ b/Webzine.WebApplication/Controllers/RechercheController.cs @@ -9,12 +9,21 @@ namespace Webzine.WebApplication.Controllers using Webzine.Repository.Contracts; using Webzine.WebApplication.ViewModels.Recherche; + /// + /// + /// public class RechercheController : Controller { private readonly ILogger logger; private readonly ITitreRepository titreRepository; private readonly IArtisteRepository artisteRepository; + /// + /// Initialise une nouvelle instance de la classe . + /// + /// + /// + /// public RechercheController( ILogger logger, ITitreRepository titreRepository, diff --git a/Webzine.WebApplication/Controllers/TitreController.cs b/Webzine.WebApplication/Controllers/TitreController.cs index 0dbad27..73746b7 100644 --- a/Webzine.WebApplication/Controllers/TitreController.cs +++ b/Webzine.WebApplication/Controllers/TitreController.cs @@ -119,7 +119,7 @@ namespace Webzine.WebApplication.Controllers this.titreRepository.IncrementNbLikes(titre); } - return this.RedirectToAction("Details", new { id = model.IdTitre }); + return this.RedirectToAction("Index", new { id = model.IdTitre }); } /// @@ -130,12 +130,6 @@ namespace Webzine.WebApplication.Controllers [HttpPost] public IActionResult Comment(TitreComment model) { - if (!this.ModelState.IsValid) - { - this.logger.LogWarning("Echec de validation du modele de commentaire pour le titre ID {Id}.", model.IdTitre); - return this.RedirectToAction("Details", new { id = model.IdTitre }); - } - var titre = this.titreRepository.Find(model.IdTitre); if (titre == null) @@ -156,7 +150,7 @@ namespace Webzine.WebApplication.Controllers this.logger.LogInformation("Commentaire ajoute avec succes au titre ID {Id}.", model.IdTitre); - return this.RedirectToAction("Details", new { id = model.IdTitre }); + return this.RedirectToAction("Index", new { id = model.IdTitre }); } private static TitreStyleItem MapTitreItem(Titre titre) diff --git a/Webzine.WebApplication/Filters/GlobalExceptionFilter.cs b/Webzine.WebApplication/Filters/GlobalExceptionFilter.cs new file mode 100644 index 0000000..15f9b73 --- /dev/null +++ b/Webzine.WebApplication/Filters/GlobalExceptionFilter.cs @@ -0,0 +1,42 @@ +namespace Webzine.WebApplication.Filters; + +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; + +/// +/// Filtre d'exception global qui intercepte toute exception non gérée et la journalise automatiquement. +/// +public class GlobalExceptionFilter : IExceptionFilter +{ + private readonly ILogger logger; + + /// + /// Initializes a new instance of the class. + /// + /// Service de journalisation injecté. + public GlobalExceptionFilter(ILogger logger) + { + this.logger = logger; + } + + /// + public void OnException(ExceptionContext context) + { + this.logger.LogError( + context.Exception, + "Erreur non gérée dans {Action} : {Message}", + context.ActionDescriptor.DisplayName, + context.Exception.Message); + + context.Result = new ObjectResult(new + { + erreur = "Une erreur inattendue est survenue.", + detail = context.Exception.Message, + }) + { + StatusCode = StatusCodes.Status500InternalServerError, + }; + + context.ExceptionHandled = true; + } +} \ No newline at end of file diff --git a/Webzine.WebApplication/Filters/ValidationActionFilter.cs b/Webzine.WebApplication/Filters/ValidationActionFilter.cs new file mode 100644 index 0000000..94d0efa --- /dev/null +++ b/Webzine.WebApplication/Filters/ValidationActionFilter.cs @@ -0,0 +1,73 @@ +namespace Webzine.WebApplication.Filters; + +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; + +/// +/// Filtre d'action qui valide automatiquement le ModelState avant l'exécution du contrôleur. +/// Mesure également le temps d'exécution de chaque action (niveau Trace). +/// +public class ValidationActionFilter : IActionFilter +{ + private readonly ILogger logger; + + /// + /// Initializes a new instance of the class. + /// + /// Service de journalisation injecté. + public ValidationActionFilter(ILogger logger) + { + this.logger = logger; + } + + /// + public void OnActionExecuting(ActionExecutingContext context) + { + if (!context.ModelState.IsValid) + { + var erreurs = context.ModelState + .Where(e => e.Value?.Errors.Count > 0) + .Select(e => $"{e.Key}: {string.Join(", ", e.Value!.Errors.Select(err => err.ErrorMessage))}") + .ToList(); + + this.logger.LogWarning( + "Validation échouée pour {Action} : {Erreurs}", + context.ActionDescriptor.DisplayName, + string.Join(" | ", erreurs)); + + string actionName = context.RouteData.Values["action"]?.ToString() ?? string.Empty; + + // cas spécial: titre details + if (actionName.Equals("Index", StringComparison.OrdinalIgnoreCase)) + { + context.Result = new RedirectResult("/"); + return; + } + + // Récupère le modèle soumis (premier argument de l'action, s'il existe) + object? model = context.ActionArguments.Values.FirstOrDefault(); + + if (context.Controller is Controller controller) + { + context.Result = new ViewResult + { + ViewName = actionName, + ViewData = new Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary( + controller.ViewData) + { + Model = model, + }, + }; + } + else + { + context.Result = new BadRequestObjectResult(context.ModelState); + } + } + } + + /// + public void OnActionExecuted(ActionExecutedContext context) + { + } +} \ No newline at end of file diff --git a/Webzine.WebApplication/Program.cs b/Webzine.WebApplication/Program.cs index 935e2da..72fc4ba 100644 --- a/Webzine.WebApplication/Program.cs +++ b/Webzine.WebApplication/Program.cs @@ -15,6 +15,7 @@ using Webzine.Repository; using Webzine.Repository.Contracts; using Webzine.WebApplication.Configuration; using Webzine.WebApplication.Extensions; +using Webzine.WebApplication.Filters; using Webzine.WebApplication.Interceptors; // Initiation du logger NLog pour la classe courante afin de pouvoir l'utiliser pour logger des messages d'information, d'erreur, etc avant la construction de l'application. @@ -27,8 +28,11 @@ try // Ajoute les services necessaires pour permettre l'utilisation des // controllers avec des vues. - builder.Services.AddControllersWithViews() - + builder.Services.AddControllersWithViews(options => + { + options.Filters.Add(); + options.Filters.Add(); + }) // Ajoute la compilation des vues lors de l'execution de l'application. // Cela nous evite de recompiler l'application a chaque modification de vue. // Necessite le package Nuget Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. @@ -87,6 +91,9 @@ try builder.Services.AddScoped(); builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + // https://learn.microsoft.com/fr-fr/aspnet/core/performance/response-compression?view=aspnetcore-10.0#configuration // Ajoute le service de compression des réponses HTTP pour réduire la taille des données envoyées au client et améliorer les performances de l'application. builder.Services.AddResponseCompression(); diff --git a/Webzine.WebApplication/Views/Titre/Index.cshtml b/Webzine.WebApplication/Views/Titre/Index.cshtml index d668fd9..215c08a 100644 --- a/Webzine.WebApplication/Views/Titre/Index.cshtml +++ b/Webzine.WebApplication/Views/Titre/Index.cshtml @@ -133,8 +133,7 @@ + placeholder="Votre commentaire..."> @@ -156,7 +155,7 @@

Commentaires

- @if (Model.Details.Commentaires != null && Model.Details.Commentaires.Any()) + @if (Model.Details.Commentaires.Any()) { foreach (var comment in Model.Details.Commentaires.OrderByDescending(c => c.DateCreation)) { diff --git a/Webzine.WebApplication/Views/Titre/Style.cshtml b/Webzine.WebApplication/Views/Titre/Style.cshtml index 1c50f0c..6970347 100644 --- a/Webzine.WebApplication/Views/Titre/Style.cshtml +++ b/Webzine.WebApplication/Views/Titre/Style.cshtml @@ -26,7 +26,7 @@
- @titre.Libelle @@ -41,7 +41,7 @@ @titre.ArtisteNom - - @titre.Libelle diff --git a/Webzine.WebApplication/nlog.config b/Webzine.WebApplication/nlog.config index 1b64237..2fc8c32 100644 --- a/Webzine.WebApplication/nlog.config +++ b/Webzine.WebApplication/nlog.config @@ -22,7 +22,7 @@ layout="${longdate}|${level:uppercase=true}|${logger}|${message} ${exception:format=tostring}|${aspnet-request-url:whenEmpty=NoRequest}" /> - From 2e5e5086bc900323219c711833b02e9e23e007ce Mon Sep 17 00:00:00 2001 From: "b.nodon" Date: Thu, 2 Apr 2026 16:11:10 +0200 Subject: [PATCH 02/10] #185 formulaire admin Artiste et style. --- Webzine.Business.Contracts/IDashboardService.cs | 4 ++-- Webzine.Business/DashboardService.cs | 9 ++++----- .../Administration/Controllers/DashboardController.cs | 6 +++--- .../ViewModels/Artiste/ArtisteCreateViewModel.cs | 7 +++++-- .../ViewModels/Artiste/ArtisteEditViewModel.cs | 5 ++++- .../ViewModels/Styles/StyleCreateViewModel.cs | 2 +- .../ViewModels/Styles/StyleEditViewModel.cs | 2 +- .../Areas/Administration/Views/Artiste/Create.cshtml | 4 ++++ .../Areas/Administration/Views/Artiste/_Form.cshtml | 5 +++++ Webzine.WebApplication/Controllers/TitreController.cs | 1 - Webzine.WebApplication/Extensions/RouteConfiguration.cs | 4 ---- 11 files changed, 29 insertions(+), 20 deletions(-) diff --git a/Webzine.Business.Contracts/IDashboardService.cs b/Webzine.Business.Contracts/IDashboardService.cs index 8bde456..423880f 100644 --- a/Webzine.Business.Contracts/IDashboardService.cs +++ b/Webzine.Business.Contracts/IDashboardService.cs @@ -1,7 +1,7 @@ -using Webzine.Business.Contracts.Dto; - namespace Webzine.Business.Contracts; +using Webzine.Business.Contracts.Dto; + /// /// Service responsable du calcul des statistiques affichées sur le tableau de bord d'administration. /// Agrège les données provenant de plusieurs repositories pour produire un résumé cohérent. diff --git a/Webzine.Business/DashboardService.cs b/Webzine.Business/DashboardService.cs index d9e9812..f1b566d 100644 --- a/Webzine.Business/DashboardService.cs +++ b/Webzine.Business/DashboardService.cs @@ -1,10 +1,9 @@ -using Webzine.Business.Contracts; -using Webzine.Entity; -using Webzine.Repository.Contracts; - namespace Webzine.Business; -using Contracts.Dto; +using Webzine.Business.Contracts; +using Webzine.Business.Contracts.Dto; +using Webzine.Entity; +using Webzine.Repository.Contracts; /// /// Implémentation de . diff --git a/Webzine.WebApplication/Areas/Administration/Controllers/DashboardController.cs b/Webzine.WebApplication/Areas/Administration/Controllers/DashboardController.cs index 97f1721..79a5d6b 100644 --- a/Webzine.WebApplication/Areas/Administration/Controllers/DashboardController.cs +++ b/Webzine.WebApplication/Areas/Administration/Controllers/DashboardController.cs @@ -1,9 +1,9 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers; +using Microsoft.AspNetCore.Mvc; + using Webzine.Business.Contracts; using Webzine.Business.Contracts.Dto; -using Microsoft.AspNetCore.Mvc; -using Webzine.Repository.Contracts; [Area("Administration")] public class DashboardController : Controller @@ -31,7 +31,7 @@ public class DashboardController : Controller /// La vue Index du tableau de bord. public IActionResult Index() { - DashboardDTO data = dashboardService.GetDashboardData(); + DashboardDTO data = this.dashboardService.GetDashboardData(); return this.View(data); } diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteCreateViewModel.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteCreateViewModel.cs index bdb43de..68dedd6 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteCreateViewModel.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteCreateViewModel.cs @@ -10,12 +10,15 @@ /// /// Nom de l'artiste. /// - [Required] + [Required(ErrorMessage = "Le nom de l'auteur est obligatoire.")] + [StringLength(50, ErrorMessage = "Le nom ne doit pas dépasser 50 caractères.")] public string Nom { get; set; } /// /// Biographie de l'artiste. - /// + /// * + [Required(ErrorMessage = "La biographie ne peux pas etre vide.")] + public string Biographie { get; set; } } } \ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteEditViewModel.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteEditViewModel.cs index bf2d503..0d34c6f 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteEditViewModel.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteEditViewModel.cs @@ -16,12 +16,15 @@ /// /// Nom de l'artiste. /// - [Required] + [Required(ErrorMessage = "Le nom de l'auteur est obligatoire.")] + [StringLength(50, ErrorMessage = "Le nom ne doit pas dépasser 50 caractères.")] + public string Nom { get; set; } /// /// Biographie de l'artiste. /// + [Required(ErrorMessage = "Le contenu de la biographie ne peut pas être vide.")] public string Biographie { get; set; } } } \ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleCreateViewModel.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleCreateViewModel.cs index 86abbde..2eba907 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleCreateViewModel.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleCreateViewModel.cs @@ -14,7 +14,7 @@ namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style /// /// Obtient ou définit le libellé du style. /// - [Required] + [Required(ErrorMessage = "Le libelle du style est obligatoire.")] public string Libelle { get; set; } } } \ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleEditViewModel.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleEditViewModel.cs index 093c130..671098c 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleEditViewModel.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleEditViewModel.cs @@ -19,7 +19,7 @@ namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style /// /// Obtient ou definit le libelle du style. /// - [Required] + [Required(ErrorMessage = "Le libelle du style est obligatoire.")] public string Libelle { get; set; } } } \ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/Views/Artiste/Create.cshtml b/Webzine.WebApplication/Areas/Administration/Views/Artiste/Create.cshtml index 38f842b..b9dc4ca 100644 --- a/Webzine.WebApplication/Areas/Administration/Views/Artiste/Create.cshtml +++ b/Webzine.WebApplication/Areas/Administration/Views/Artiste/Create.cshtml @@ -11,6 +11,8 @@
+ +
@@ -19,6 +21,8 @@
+ +
diff --git a/Webzine.WebApplication/Areas/Administration/Views/Artiste/_Form.cshtml b/Webzine.WebApplication/Areas/Administration/Views/Artiste/_Form.cshtml index 960ad3f..c7fbf2e 100644 --- a/Webzine.WebApplication/Areas/Administration/Views/Artiste/_Form.cshtml +++ b/Webzine.WebApplication/Areas/Administration/Views/Artiste/_Form.cshtml @@ -6,6 +6,8 @@
+ +
@@ -14,7 +16,10 @@
+ +
+ diff --git a/Webzine.WebApplication/Controllers/TitreController.cs b/Webzine.WebApplication/Controllers/TitreController.cs index 384f41e..a741043 100644 --- a/Webzine.WebApplication/Controllers/TitreController.cs +++ b/Webzine.WebApplication/Controllers/TitreController.cs @@ -39,7 +39,6 @@ namespace Webzine.WebApplication.Controllers ///
/// Identifiant du titre. /// Vue des details ou 404 si introuvable. - public IActionResult Index(int id) { this.logger.LogInformation("Demande d'affichage du detail pour le titre ID {Id}.", id); diff --git a/Webzine.WebApplication/Extensions/RouteConfiguration.cs b/Webzine.WebApplication/Extensions/RouteConfiguration.cs index d7f43b8..0b9b428 100644 --- a/Webzine.WebApplication/Extensions/RouteConfiguration.cs +++ b/Webzine.WebApplication/Extensions/RouteConfiguration.cs @@ -23,9 +23,7 @@ public static class RouteConfiguration pattern: "artiste/{nom}", defaults: new { controller = "Artiste", action = "Index" }); - // ----------- ADMIN ----------- - var adminRoutes = new Dictionary { { "artistes", "Artiste" }, { "commentaires", "Commentaire" }, { "styles", "Style" }, { "titres", "Titre" }, @@ -39,9 +37,7 @@ public static class RouteConfiguration defaults: new { area = "Administration", controller = route.Value, action = "Index" }); } - // --- AUTRE PROUTES --- - endpoints.MapControllerRoute( name: "areas", pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); From 6dc6a2e0eabf26af2032a59c5053e03126c8bf7a Mon Sep 17 00:00:00 2001 From: mirage <119869686+ClementBobin@users.noreply.github.com> Date: Thu, 2 Apr 2026 16:34:05 +0200 Subject: [PATCH 03/10] =?UTF-8?q?fix:=20mettre=20=C3=A0=20jour=20Microsoft?= =?UTF-8?q?.Extensions.Logging.Abstractions=20package=20r=C3=A9f=C3=A9renc?= =?UTF-8?q?e=20=C3=A0=20la=20version=2010.0.0-preview.1.25080.5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Webzine.Business/Webzine.Business.csproj | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Webzine.Business/Webzine.Business.csproj b/Webzine.Business/Webzine.Business.csproj index ee626b0..9110639 100644 --- a/Webzine.Business/Webzine.Business.csproj +++ b/Webzine.Business/Webzine.Business.csproj @@ -25,12 +25,7 @@ - - - - - ..\..\..\..\..\..\..\.nuget\packages\microsoft.extensions.logging.abstractions\10.0.5\lib\net10.0\Microsoft.Extensions.Logging.Abstractions.dll - + From ceb44f0d33f3a29964c78d23e77235fd0f277d74 Mon Sep 17 00:00:00 2001 From: mirage <119869686+ClementBobin@users.noreply.github.com> Date: Thu, 2 Apr 2026 16:37:50 +0200 Subject: [PATCH 04/10] style: ajuster la mise en forme des balises HTML dans Index.cshtml --- .../Views/Titre/Index.cshtml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Webzine.WebApplication/Views/Titre/Index.cshtml b/Webzine.WebApplication/Views/Titre/Index.cshtml index 215c08a..102c321 100644 --- a/Webzine.WebApplication/Views/Titre/Index.cshtml +++ b/Webzine.WebApplication/Views/Titre/Index.cshtml @@ -60,13 +60,14 @@
- +
- + Editer @@ -88,7 +89,7 @@ class="img-fluid rounded shadow" alt="Jaquette" loading="lazy" - fetchpriority="high" /> + fetchpriority="high"/>
@@ -121,7 +122,7 @@ + required/> @@ -131,9 +132,10 @@
+ rows="3" + class="form-control input-full" + placeholder="Votre commentaire..." + required>
@@ -168,7 +170,7 @@ width="50" height="50" class="rounded-circle me-3 shadow-sm" - alt="avatar" /> + alt="avatar"/>
@comment.Auteur, From 98635ba7bf8ffde2d7106cdddded90e73c42593e Mon Sep 17 00:00:00 2001 From: "b.nodon" Date: Fri, 3 Apr 2026 09:35:35 +0200 Subject: [PATCH 05/10] #185 Message d'erreur pour les input vide. --- .../ViewModels/Titre/AdminTitreForm.cs | 13 +++++++++++++ .../Areas/Administration/Views/Titre/_Form.cshtml | 10 ++++++++++ 2 files changed, 23 insertions(+) diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Titre/AdminTitreForm.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Titre/AdminTitreForm.cs index 5305732..22c5fd9 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Titre/AdminTitreForm.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Titre/AdminTitreForm.cs @@ -1,5 +1,7 @@ namespace Webzine.WebApplication.Areas.Administration.ViewModels.Titre; +using System.ComponentModel.DataAnnotations; + using Microsoft.AspNetCore.Mvc.Rendering; /// @@ -15,36 +17,47 @@ public class AdminTitreForm /// /// Définit l'identifiant de l'artiste associé au titre. /// + [Required(ErrorMessage = "L'id de l'artiste est obligatoire.")] + public int IdArtiste { get; set; } /// /// Définit le titre du titre. /// + [Required(ErrorMessage = "Le labelle est obligatoire.")] + public string Libelle { get; set; } /// /// Définit le nom de l'album associé au titre. /// + [Required(ErrorMessage = "L'album est obligatoire.")] + public string Album { get; set; } /// /// Définit la chronique du titre, peut-être une critique ou une description du titre. /// + [Required(ErrorMessage = "La chronique est obligatoire.")] public string Chronique { get; set; } /// /// Définit la date de sortie du titre. /// + [Required(ErrorMessage = "La date de est obligatoire.")] + public DateTime DateSortie { get; set; } /// /// Définit la durée du titre en secondes. /// + [Required(ErrorMessage = "La durée est obligatoire.")] public int Duree { get; set; } /// /// Définit l'URL de la jaquette de l'album associé au titre. /// + [Required(ErrorMessage = "L'Url de la jaquette est obligatoire.")] public string UrlJaquette { get; set; } /// diff --git a/Webzine.WebApplication/Areas/Administration/Views/Titre/_Form.cshtml b/Webzine.WebApplication/Areas/Administration/Views/Titre/_Form.cshtml index d1f4f8c..bc44d5a 100644 --- a/Webzine.WebApplication/Areas/Administration/Views/Titre/_Form.cshtml +++ b/Webzine.WebApplication/Areas/Administration/Views/Titre/_Form.cshtml @@ -8,6 +8,8 @@ + +
@@ -16,6 +18,7 @@
+
@@ -24,6 +27,7 @@
+
@@ -34,6 +38,8 @@ + + @@ -55,6 +61,8 @@ class="form-control" type="number" min="0" /> + + seconds @@ -66,6 +74,8 @@
+ +
From acbf51a6e431ae7ddbd404b84f5f1cfa8c559e94 Mon Sep 17 00:00:00 2001 From: "m.curnillon" Date: Fri, 3 Apr 2026 15:20:48 +0200 Subject: [PATCH 06/10] Actualiser Webzine.WebApplication/appsettings.json --- Webzine.WebApplication/appsettings.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Webzine.WebApplication/appsettings.json b/Webzine.WebApplication/appsettings.json index 46fd8b0..248f821 100644 --- a/Webzine.WebApplication/appsettings.json +++ b/Webzine.WebApplication/appsettings.json @@ -15,6 +15,6 @@ }, "AllowedHosts": "*", "EfPerformance": { - "SeuilMs": 10 + "SeuilMs": 60 } } \ No newline at end of file From 2550d39af5f5489c3f7484eb0abfc3acd466a758 Mon Sep 17 00:00:00 2001 From: mirage <119869686+ClementBobin@users.noreply.github.com> Date: Fri, 3 Apr 2026 16:46:11 +0200 Subject: [PATCH 07/10] refactor: update namespaces and improve null handling in view models and controllers --- Webzine.Repository/DbStyleRepository.cs | 2 -- .../Administration/Controllers/ArtisteController.cs | 13 ++++++++----- .../Administration/Controllers/StyleController.cs | 4 +++- .../ViewModels/Artiste/AdminArtisteForm.cs | 4 ++-- .../ViewModels/Artiste/ArtisteEditViewModel.cs | 6 +----- .../ViewModels/Styles/StyleCreateViewModel.cs | 2 +- .../ViewModels/Styles/StyleDeleteViewModel.cs | 4 ++-- .../ViewModels/Styles/StyleEditViewModel.cs | 2 +- .../Areas/Administration/Views/Style/Create.cshtml | 2 +- .../Areas/Administration/Views/Style/Delete.cshtml | 2 +- .../Areas/Administration/Views/Style/Edit.cshtml | 2 +- Webzine.WebApplication/Program.cs | 2 +- 12 files changed, 22 insertions(+), 23 deletions(-) diff --git a/Webzine.Repository/DbStyleRepository.cs b/Webzine.Repository/DbStyleRepository.cs index 0412a90..57f42f3 100644 --- a/Webzine.Repository/DbStyleRepository.cs +++ b/Webzine.Repository/DbStyleRepository.cs @@ -94,7 +94,6 @@ public class DbStyleRepository : IStyleRepository this.logger.LogDebug("Recherche du style avec l'ID: {Id}", id); var style = this.context.Styles - .AsNoTracking() .Include(s => s.Titres) .SingleOrDefault(s => s.IdStyle == id); @@ -123,7 +122,6 @@ public class DbStyleRepository : IStyleRepository this.logger.LogDebug("Tri des styles par libellé"); var styles = this.context.Styles - .AsNoTracking() .OrderBy(s => s.Libelle); this.logger.LogDebug("La liste de styles a été récupérée."); diff --git a/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs b/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs index c68e99e..4d4311a 100644 --- a/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs +++ b/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs @@ -97,12 +97,15 @@ public class ArtisteController : Controller [HttpPost] public IActionResult Edit(ArtisteEditViewModel model) { - var artiste = new Artiste + var artiste = this.artisteRepository.Find(model.Id); + + if (artiste == null) { - IdArtiste = model.Id, - Nom = model.Nom, - Biographie = model.Biographie, - }; + return this.RedirectToAction("Index"); + } + + artiste.Nom = model.Nom; + artiste.Biographie = model.Biographie; this.artisteRepository.Update(artiste); diff --git a/Webzine.WebApplication/Areas/Administration/Controllers/StyleController.cs b/Webzine.WebApplication/Areas/Administration/Controllers/StyleController.cs index 578cf4d..cb08beb 100644 --- a/Webzine.WebApplication/Areas/Administration/Controllers/StyleController.cs +++ b/Webzine.WebApplication/Areas/Administration/Controllers/StyleController.cs @@ -2,9 +2,11 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers; using Microsoft.AspNetCore.Mvc; +using ViewModels.Styles; + using Webzine.Entity; using Webzine.Repository.Contracts; -using Webzine.WebApplication.Areas.Administration.ViewModels.Style; +using Webzine.WebApplication.Areas.Administration.ViewModels.Styles; /// /// Controleur pour la gestion des styles dans l'administration du webzine. diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/AdminArtisteForm.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/AdminArtisteForm.cs index c1700cb..ee14731 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/AdminArtisteForm.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/AdminArtisteForm.cs @@ -14,11 +14,11 @@ /// /// Définit le nom de l'artiste. /// - public string Nom { get; set; } + public string? Nom { get; set; } /// /// Définit la biographie de l'artiste. /// - public string Biographie { get; set; } + public string? Biographie { get; set; } } } \ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteEditViewModel.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteEditViewModel.cs index 0d34c6f..98b3887 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteEditViewModel.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteEditViewModel.cs @@ -20,11 +20,7 @@ [StringLength(50, ErrorMessage = "Le nom ne doit pas dépasser 50 caractères.")] public string Nom { get; set; } - - /// - /// Biographie de l'artiste. - /// - [Required(ErrorMessage = "Le contenu de la biographie ne peut pas être vide.")] + public string Biographie { get; set; } } } \ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleCreateViewModel.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleCreateViewModel.cs index 2eba907..de912e7 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleCreateViewModel.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleCreateViewModel.cs @@ -2,7 +2,7 @@ // Copyright (c) Equipe 1 - BOBIN, MASI, NODON, VETU. All rights reserved. // -namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style +namespace Webzine.WebApplication.Areas.Administration.ViewModels.Styles { using System.ComponentModel.DataAnnotations; diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleDeleteViewModel.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleDeleteViewModel.cs index fc94e54..daade0d 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleDeleteViewModel.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleDeleteViewModel.cs @@ -2,7 +2,7 @@ // Copyright (c) Equipe 1 - BOBIN, MASI, NODON, VETU. All rights reserved. // -namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style +namespace Webzine.WebApplication.Areas.Administration.ViewModels.Styles { /// /// ViewModel pour la suppression d'un style en administration. @@ -17,6 +17,6 @@ namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style /// /// Obtient ou définit le libellé du style. /// - public string Libelle { get; set; } + public string? Libelle { get; set; } } } \ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleEditViewModel.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleEditViewModel.cs index 671098c..b959456 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleEditViewModel.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleEditViewModel.cs @@ -2,7 +2,7 @@ // Copyright (c) Equipe 1 - BOBIN, MASI, NODON, VETU. All rights reserved. // -namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style +namespace Webzine.WebApplication.Areas.Administration.ViewModels.Styles { using System.ComponentModel.DataAnnotations; diff --git a/Webzine.WebApplication/Areas/Administration/Views/Style/Create.cshtml b/Webzine.WebApplication/Areas/Administration/Views/Style/Create.cshtml index c0cb8f7..ddc0c14 100644 --- a/Webzine.WebApplication/Areas/Administration/Views/Style/Create.cshtml +++ b/Webzine.WebApplication/Areas/Administration/Views/Style/Create.cshtml @@ -1,4 +1,4 @@ -@model Webzine.WebApplication.Areas.Administration.ViewModels.Style.StyleCreateViewModel +@model Webzine.WebApplication.Areas.Administration.ViewModels.Styles.StyleCreateViewModel @{ ViewData["Title"] = "Créer un style"; diff --git a/Webzine.WebApplication/Areas/Administration/Views/Style/Delete.cshtml b/Webzine.WebApplication/Areas/Administration/Views/Style/Delete.cshtml index 47dad12..61dce02 100644 --- a/Webzine.WebApplication/Areas/Administration/Views/Style/Delete.cshtml +++ b/Webzine.WebApplication/Areas/Administration/Views/Style/Delete.cshtml @@ -1,4 +1,4 @@ -@model Webzine.WebApplication.Areas.Administration.ViewModels.Style.StyleDeleteViewModel +@model Webzine.WebApplication.Areas.Administration.ViewModels.Styles.StyleDeleteViewModel @{ ViewData["Title"] = "Supprimer un style"; diff --git a/Webzine.WebApplication/Areas/Administration/Views/Style/Edit.cshtml b/Webzine.WebApplication/Areas/Administration/Views/Style/Edit.cshtml index 446cabe..bf57f66 100644 --- a/Webzine.WebApplication/Areas/Administration/Views/Style/Edit.cshtml +++ b/Webzine.WebApplication/Areas/Administration/Views/Style/Edit.cshtml @@ -1,4 +1,4 @@ -@model Webzine.WebApplication.Areas.Administration.ViewModels.Style.StyleEditViewModel +@model Webzine.WebApplication.Areas.Administration.ViewModels.Styles.StyleEditViewModel @{ ViewData["Title"] = "Editer un style"; diff --git a/Webzine.WebApplication/Program.cs b/Webzine.WebApplication/Program.cs index 32c3737..4fcbc78 100644 --- a/Webzine.WebApplication/Program.cs +++ b/Webzine.WebApplication/Program.cs @@ -30,8 +30,8 @@ try // controllers avec des vues. builder.Services.AddControllersWithViews(options => { + // options.Filters.Add(); options.Filters.Add(); - options.Filters.Add(); }) // Ajoute la compilation des vues lors de l'execution de l'application. From 71cdf8d179c8b189d792b956ad14e9f6f5adeced Mon Sep 17 00:00:00 2001 From: mirage <119869686+ClementBobin@users.noreply.github.com> Date: Fri, 3 Apr 2026 16:52:55 +0200 Subject: [PATCH 08/10] fix: improve form handling for Create and Edit actions in TitreController --- .../Controllers/TitreController.cs | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/Webzine.WebApplication/Areas/Administration/Controllers/TitreController.cs b/Webzine.WebApplication/Areas/Administration/Controllers/TitreController.cs index 3f33a2d..7607228 100644 --- a/Webzine.WebApplication/Areas/Administration/Controllers/TitreController.cs +++ b/Webzine.WebApplication/Areas/Administration/Controllers/TitreController.cs @@ -95,6 +95,33 @@ public class TitreController : Controller [HttpPost] public IActionResult Create(TitreAdminDTO model) { + if (!this.ModelState.IsValid) + { + var form = new AdminTitreForm + { + IdArtiste = model.IdArtiste, + Libelle = model.Libelle, + Album = model.Album, + Chronique = model.Chronique, + DateSortie = model.DateSortie, + Duree = model.Duree, + UrlJaquette = model.UrlJaquette, + UrlEcoute = model.UrlEcoute, + Styles = model.Styles, + Artistes = this.artisteRepository.FindAll().Select(a => new SelectListItem + { + Value = a.IdArtiste.ToString(), + Text = a.Nom, + }).ToList(), + AllStyles = this.styleRepository.FindAll().Select(s => new SelectListItem + { + Value = s.IdStyle.ToString(), + Text = s.Libelle, + }).ToList(), + }; + return this.View(form); + } + this.titreAdminService.CreerTitre(model); return this.RedirectToAction("Index"); } @@ -147,6 +174,34 @@ public class TitreController : Controller [HttpPost] public IActionResult Edit(TitreAdminDTO model) { + if (!this.ModelState.IsValid) + { + var form = new AdminTitreForm + { + Id = model.Id, + IdArtiste = model.IdArtiste, + Libelle = model.Libelle, + Album = model.Album, + Chronique = model.Chronique, + DateSortie = model.DateSortie, + Duree = model.Duree, + UrlJaquette = model.UrlJaquette, + UrlEcoute = model.UrlEcoute, + Styles = model.Styles, + Artistes = this.artisteRepository.FindAll().Select(a => new SelectListItem + { + Value = a.IdArtiste.ToString(), + Text = a.Nom, + }).ToList(), + AllStyles = this.styleRepository.FindAll().Select(s => new SelectListItem + { + Value = s.IdStyle.ToString(), + Text = s.Libelle, + }).ToList(), + }; + return this.View(form); + } + this.titreAdminService.ModifierTitre(model); return this.RedirectToAction("Index"); } From 80afb9b0bf7122a5d53d30afce064da880f2fd9d Mon Sep 17 00:00:00 2001 From: mirage <119869686+ClementBobin@users.noreply.github.com> Date: Fri, 3 Apr 2026 16:54:46 +0200 Subject: [PATCH 09/10] fix: enable GlobalExceptionFilter in controller options --- Webzine.WebApplication/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Webzine.WebApplication/Program.cs b/Webzine.WebApplication/Program.cs index 4fcbc78..089ee99 100644 --- a/Webzine.WebApplication/Program.cs +++ b/Webzine.WebApplication/Program.cs @@ -30,7 +30,7 @@ try // controllers avec des vues. builder.Services.AddControllersWithViews(options => { - // options.Filters.Add(); + options.Filters.Add(); options.Filters.Add(); }) From a42b430fb34bfae08ad94f84a32549ea167cc7d6 Mon Sep 17 00:00:00 2001 From: mirage <119869686+ClementBobin@users.noreply.github.com> Date: Fri, 3 Apr 2026 17:18:03 +0200 Subject: [PATCH 10/10] fix: disable GlobalExceptionFilter in Program.cs --- Webzine.WebApplication/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Webzine.WebApplication/Program.cs b/Webzine.WebApplication/Program.cs index 089ee99..4fcbc78 100644 --- a/Webzine.WebApplication/Program.cs +++ b/Webzine.WebApplication/Program.cs @@ -30,7 +30,7 @@ try // controllers avec des vues. builder.Services.AddControllersWithViews(options => { - options.Filters.Add(); + // options.Filters.Add(); options.Filters.Add(); })