MVC Framework - Ausnahmebehandlung

In ASP.NET erfolgt die Fehlerbehandlung mithilfe des Standard-Try-Catch-Ansatzes oder mithilfe von Anwendungsereignissen. ASP.NET MVC bietet eine integrierte Unterstützung für die Ausnahmebehandlung mithilfe einer Funktion, die als Ausnahmefilter bezeichnet wird. Wir werden hier zwei Ansätze lernen: einen mit Überschreiben der onException-Methode und einen durch Definieren der HandleError-Filter.

OnException-Methode überschreiben

Dieser Ansatz wird verwendet, wenn alle Ausnahmen der Aktionsmethoden auf Controller-Ebene behandelt werden sollen.

Um diesen Ansatz zu verstehen, erstellen Sie eine MVC-Anwendung (befolgen Sie die in den vorherigen Kapiteln beschriebenen Schritte). Fügen Sie nun eine neue Controller-Klasse hinzu und fügen Sie den folgenden Code hinzu, der die onException-Methode überschreibt und explizit einen Fehler in unserer Action-Methode auslöst:

Lassen Sie uns nun eine gemeinsame Ansicht mit dem Namen erstellen ErrorDies wird dem Benutzer angezeigt, wenn in der Anwendung eine Ausnahme auftritt. Erstellen Sie im Ordner "Ansichten" einen neuen Ordner mit dem Namen "Freigegeben" und fügen Sie eine neue Ansicht mit dem Namen "Fehler" hinzu.

Kopieren Sie den folgenden Code in die neu erstellte Datei Error.cshtml -

Wenn Sie versuchen, die Anwendung jetzt auszuführen, wird das folgende Ergebnis angezeigt. Der obige Code rendert die Fehleransicht, wenn in einer der Aktionsmethoden in diesem Controller eine Ausnahme auftritt.

Der Vorteil dieses Ansatzes besteht darin, dass mehrere Aktionen innerhalb derselben Steuerung diese Fehlerbehandlungslogik gemeinsam nutzen können. Der Nachteil ist jedoch, dass wir nicht dieselbe Fehlerbehandlungslogik für mehrere Controller verwenden können.

HandleError-Attribut

Das HandleError-Attribut ist einer der Aktionsfilter, die wir im Kapitel Filter und Aktionsfilter untersucht haben. Das HandleErrorAttribute ist die Standardimplementierung von IExceptionFilter. Dieser Filter behandelt alle Ausnahmen, die durch Controller-Aktionen, Filter und Ansichten ausgelöst werden.

Um diese Funktion zu verwenden, aktivieren Sie zunächst den Abschnitt customErrors in web.config. Öffnen Sie die Datei web.config, platzieren Sie den folgenden Code in system.web und setzen Sie den Wert auf On.

<customErrors mode = "On"/>

Wir haben bereits die Fehleransicht im freigegebenen Ordner unter Ansichten erstellt. Ändern Sie diesmal den Code dieser View-Datei wie folgt, um ihn mit dem HandleErrorInfo-Modell (das unter System.Web.MVC vorhanden ist) stark einzugeben.

@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>

Fügen Sie nun den folgenden Code in Ihre Controller-Datei ein, der das Attribut [HandleError] in der Controller-Datei angibt.

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(); 
      } 
   } 
}

Wenn Sie versuchen, die Anwendung jetzt auszuführen, wird eine ähnliche Fehlermeldung wie im folgenden Screenshot angezeigt.

Wie Sie sehen können, enthält der Fehler diesmal weitere Informationen zu den Details zu Controller und Aktion. Auf diese Weise kann der HandleError auf jeder Ebene und über Controller hinweg verwendet werden, um solche Fehler zu behandeln.