Wie gehe ich mit dem [HandleError]
Filter in asp.net MVC Preview 5 vor?
Ich habe die customErrors in meiner Web.config-Datei festgelegt
<customErrors mode="On" defaultRedirect="Error.aspx">
<error statusCode="403" redirect="NoAccess.htm"/>
<error statusCode="404" redirect="FileNotFound.htm"/>
</customErrors>
und setze [HandleError] wie folgt über meine Controller-Klasse:
[HandleError]
public class DSWebsiteController: Controller
{
[snip]
public ActionResult CrashTest()
{
throw new Exception("Oh Noes!");
}
}
Dann lasse ich meine Controller von dieser Klasse erben und rufe CrashTest () auf. Visual Studio hält bei dem Fehler an und nachdem ich f5 gedrückt habe, um fortzufahren, werde ich zu Error.aspx? Aspxerrorpath = / sxi.mvc / CrashTest umgeleitet (wobei sxi der Name des verwendeten Controllers ist. Natürlich kann der Pfad nicht gefunden werden und ich erhalte "Serverfehler in '/' Anwendung." 404.
Diese Site wurde von Vorschau 3 auf 5 portiert. Bis auf die Fehlerbehandlung läuft alles (es war nicht so viel Arbeit zu portieren). Wenn ich ein komplett neues Projekt erstelle, scheint die Fehlerbehandlung zu funktionieren.
Ideen?
--Hinweis--
Da diese Frage jetzt mehr als 3K-Ansichten hat, hielt ich es für vorteilhaft, das einzugeben , was ich derzeit (ASP.NET MVC 1.0) verwende. Im mvc contrib-Projekt gibt es ein brillantes Attribut namens "RescueAttribute". Sie sollten es wahrscheinlich auch ausprobieren;)
quelle
RescueAttribute
Quelle: mvccontrib.codeplex.com/SourceControl/changeset/view/…Antworten:
Wenn Sie Ihrer Klasse (oder Ihrer Aktionsmethode) nur das Attribut HandleError zur Verfügung stellen, sucht MVC bei Auftreten einer nicht behandelten Ausnahme zuerst im Ansichtsordner des Controllers nach einer entsprechenden Ansicht mit dem Namen "Fehler". Wenn es dort nicht gefunden werden kann, wird im Ordner "Shared View" gesucht (der standardmäßig eine Error.aspx-Datei enthalten sollte).
Sie können auch zusätzliche Attribute mit spezifischen Informationen über die Art der gesuchten Ausnahme stapeln. Zu diesem Zeitpunkt können Sie den Fehler auf eine andere Ansicht als die Standardansicht "Fehler" lenken.
Weitere Informationen finden Sie in Scott Guthries Blogbeitrag .
quelle
global.asax
wie diese eine Nachricht an Benutzer zeigen?Es sollte auch beachtet werden, dass Fehler, die den http-Fehlercode nicht auf 500 setzen
(zB UnauthorizedAccessException)
wird vom HandleError-Filter nicht behandelt.
quelle
Lösung für http-Fehlercode bis 500 Dies ist ein Attribut namens [ERROR], das eine Aktion ausführt
//BEISPIEL:
quelle
Attribute in MVC sind sehr nützlich bei der Fehlerbehandlung bei der get- und post- Methode und verfolgen auch den Ajax-Aufruf .
Erstellen Sie einen Basis-Controller in Ihrer Anwendung und erben Sie ihn in Ihrem Haupt-Controller (EmployeeController).
öffentliche Klasse EmployeeController: BaseController
Fügen Sie den folgenden Code im Basis-Controller hinzu.
===============================================
Findet das Verzeichnis: Root / App_Start / FilterConfig.cs
Fügen Sie den folgenden Code hinzu:
AJAX-Fehler verfolgen:
Rufen Sie die CheckAJAXError-Funktion beim Laden der Layoutseite auf.
quelle
OnException
, um Ausnahmen zu behandeln" , zeigen aber eine ziemlich schlechte Implementierung.Sie vermissen Error.aspx :) In Vorschau 5 befindet sich diese in Ihrem Ordner Views / Shared. Kopieren Sie es einfach aus einem neuen Preview 5-Projekt.
quelle
}}
quelle