2010-11-24 10 views
1

Wie gefragt here.Kann der ASP.NET MVC Gelber Bildschirm des Todes (YSOD) bei Bedarf generiert werden

Ich möchte wissen, ob es möglich ist, das HTML-Rendering des YSOD zu erhalten, damit Ausnahmen OHNE ELMAH per Mail gesendet werden können? Ich behandle die Fehler und zeige dem Benutzer eine benutzerdefinierte Fehlerseite an. Ich sende auch die Ausnahme allgemeine Informationen per E-Mail, aber ich würde wirklich gerne wissen, ob ich sie in die echte integrierte YSOD-Engine von ASP.NET einbinden und die HTML-Formatierung beibehalten kann.

UPDATE1:

ich meine benutzerdefinierte Ausnahmen haben (DupplicatedArbsException), die eine Ansicht mit der Nachricht zurück, die ich "Managed Ausnahmen" betrachten. Wenn es sich jedoch um einen echten Fehler handelt, den ich nicht gefunden habe, wird die Fehleransicht zurückgegeben.

[HandleError(ExceptionType = typeof(Exception), View = "Error")] 
    [HandleError(ExceptionType = typeof(DuplicatedArbsException), View = "ErrorViewArbs")] 
    public ActionResult Create(string id, int? version) 
    { 
     //... 
    } 

Der HandleError hebt an, was zur Zeit nichts tut.

protected override void OnException(ExceptionContext filterContext) 
    { 
     var ex = filterContext.Exception; 
     base.OnException(filterContext); 
    } 

..

<customErrors mode="On" defaultRedirect="Error"/> 

Die Ausnahme in Custom Modus angehoben = "off" ist die YSOD von asp.net. Wenn ich jedoch customErrors mode = "on" einschalte, werden diese Ausnahmen nicht in ihr HTML-Pendant eingepackt, sondern nur in die Ausnahmemeldungen (überhaupt kein HTML).

+1

bei der Suche helfen: die YSOD ist Teil der ASP.NET-Engine, nicht das .NET-Framework. – Omar

+0

danke, ich habe es geändert –

Antwort

1

Sie können das Application_Error Ereignis in global.asax handhaben, die von der ASP.NET-Engine ausgelöst wird jede Zeit eine Ausnahme nicht behandelt wird:

protected void Application_Error(object sender, EventArgs e) 
{ 
    var app = (HttpApplication)sender; 
    var context = app.Context; 
    // get the exception that was unhandled 
    Exception ex = context.Server.GetLastError(); 

    // TODO: log, send the exception by mail 
} 
+0

Da ich alle Ausnahme behandeln, wird der Application_Error nie ausgelöst. Außerdem ist context.Server.GetLastError() immer null. –

+0

Wenn Sie alle Ausnahmen behandeln, sollten Sie die YSOD nie sehen. –

+0

Ich möchte nur die YSOD-Ausnahme abfangen, sie per E-Mail an den Site-Administrator senden und dann die Nicht-YSOD-Nachricht an den Benutzer senden. –

Verwandte Themen