Thomas Bandt

Über mich | Kontakt | Archiv

ASP.NET MVC - benutzerfreundliche Fehlerseiten anzeigen

Schon bei ASP.NET MVC 1.0 (mein Gott, ist das wirklisch schon wieder zwei Jahre her?) gab es über das HandleError-Attribut eine gute Möglichkeit Fehlerseiten zu konfigurieren. Seit ASP.NET MVC 2 ist das gar nicht mehr nötig, es sei denn man möchte die Ausgabe wie im verlinkten Beispiel nach verschienenen Exceptions variieren.

Es genügt die Platzierung einer Error.aspx bzw. auch Error.cshtml ab MVC 3 im Ordner /Views/Shared. Der Name der View ist dem Framework bekannt und muss nirgendwo mehr zusätzlich konfiguriert werden. Inhaltlich ist man gewohnt frei - man kann sowohl von einer Masterpage/einem Layoutfile ableiten als auch eine normale HTML-Seite zurückliefern, ohne Abhängigkeiten:

   1:  @model System.Web.Mvc.HandleErrorInfo
   2:  @{
   3:      Layout = null;
   4:  }
   5:   
   6:  <!DOCTYPE html>
   7:   
   8:  <html>
   9:  <head>
  10:      <title>Fehler</title>
  11:  </head>
  12:  <body>
  13:      <h1>Ooops ...</h1>
  14:      <p>Leider ist ein Fehler aufgetreten: @Model.Exception.Message</p>
  15:  </body>
  16:  </html>

Das würde ich auch empfehlen - denn nutzt man eine Masterpage und ruft die wiederum eine View oder eine Action auf, die einen Fehler produziert, dann läuft man gezwungenermaßen in eine Endlosschleife. Also lieber eine vom Layout abweichende einfache Fehlerseite erstellen als dieses Risiko eingehen.

Das Model ist vom Typ HandleErrorInfo und beinhaltet sowohl die Namen des aufgerufenen Controllers und der Action, in der der Fehler auftrat, als auch die konkret geworfene Exception.

Damit man diese Seite auch angezeigt bekommt, muss in der Web.config noch ein entsprechender Eintrag hinterlegt werden, der neuerdings nicht mehr in den Projekttemplates zu finden ist:

   1:  <?xml version="1.0" encoding="UTF-8"?>
   2:  <configuration>
   3:      <system.web>
   4:      <customErrors mode="On" />
   5:      </system.web>
   6:  </configuration>

Für die Konfiguration gibt es folgende Optionen:

That's it.



« Zurück  |  Weiter »