MVC Framework - Gestion des exceptions

Dans ASP.NET, la gestion des erreurs est effectuée à l'aide de l'approche standard try catch ou à l'aide d'événements d'application. ASP.NET MVC est fourni avec une prise en charge intégrée de la gestion des exceptions à l'aide d'une fonctionnalité appelée filtres d'exception. Nous allons apprendre deux approches ici: une avec la substitution de la méthode onException et une autre en définissant les filtres HandleError.

Remplacer la méthode OnException

Cette approche est utilisée lorsque nous voulons gérer toutes les exceptions dans les méthodes Action au niveau du contrôleur.

Pour comprendre cette approche, créez une application MVC (suivez les étapes décrites dans les chapitres précédents). Maintenant, ajoutez une nouvelle classe Controller et ajoutez le code suivant qui remplace la méthode onException et lève explicitement une erreur dans notre méthode Action -

Maintenant, créons une vue commune nommée Errorqui sera montré à l'utilisateur lorsqu'une exception se produit dans l'application. Dans le dossier Views, créez un nouveau dossier appelé Shared et ajoutez une nouvelle View nommée Error.

Copiez le code suivant dans le fichier Error.cshtml nouvellement créé -

Si vous essayez d'exécuter l'application maintenant, cela donnera le résultat suivant. Le code ci-dessus rend la vue d'erreur lorsqu'une exception se produit dans l'une des méthodes d'action de ce contrôleur.

L'avantage de cette approche est que plusieurs actions au sein du même contrôleur peuvent partager cette logique de gestion des erreurs. Cependant, l'inconvénient est que nous ne pouvons pas utiliser la même logique de gestion des erreurs sur plusieurs contrôleurs.

Attribut HandleError

L'attribut HandleError est l'un des filtres d'action que nous avons étudiés dans le chapitre Filtres et filtres d'action. HandleErrorAttribute est l'implémentation par défaut de IExceptionFilter. Ce filtre gère toutes les exceptions déclenchées par les actions, les filtres et les vues du contrôleur.

Pour utiliser cette fonctionnalité, activez tout d'abord la section customErrors dans web.config. Ouvrez le web.config et placez le code suivant dans system.web et définissez sa valeur sur On.

<customErrors mode = "On"/>

Nous avons déjà créé la vue d'erreur dans le dossier partagé sous Vues. Cette fois, changez le code de ce fichier View en suivant, pour le taper fortement avec le modèle HandleErrorInfo (qui est présent sous System.Web.MVC).

@model System.Web.Mvc.HandleErrorInfo 

@{ 
Layout = null; 
} 
  
<!DOCTYPE html> 
<html> 
   <head> 
      <meta name = "viewport" content = "width = device-width" /> 
      <title>Error</title> 
   </head> 
   
   <body> 
      <h2> 
         Sorry, an error occurred while processing your request.  
      </h2> 
      <h2>Exception details</h2> 
      
      <p> 
         Controller: @Model.ControllerName <br> 
         Action: @Model.ActionName 
         Exception: @Model.Exception 
      </p> 
   
   </body> 
</html>

Placez maintenant le code suivant dans votre fichier de contrôleur qui spécifie l'attribut [HandleError] dans le fichier de contrôleur.

using System; 
using System.Data.Common; 
using System.Web.Mvc;  

namespace ExceptionHandlingMVC.Controllers { 
   [HandleError] 
   public class ExceptionHandlingController : Controller { 
      
      public ActionResult TestMethod() { 
         throw new Exception("Test Exception"); 
         return View(); 
      } 
   } 
}

Si vous essayez d'exécuter l'application maintenant, vous obtiendrez une erreur similaire à celle illustrée dans la capture d'écran suivante.

Comme vous pouvez le voir, cette fois l'erreur contient plus d'informations sur le contrôleur et les détails liés à l'action. De cette manière, HandleError peut être utilisé à n'importe quel niveau et entre les contrôleurs pour gérer de telles erreurs.