1

Comme demandé here.L'écran de mort jaune ASP.NET MVC (YSOD) peut-il être généré sur demande?

Je veux savoir s'il est possible d'envoyer le rendu HTML de YSOD pour des exceptions par courrier SANS utiliser ELMAH? Je gère les erreurs et montre une page d'erreur personnalisée à l'utilisateur. J'envoie également l'information générale d'exception à travers le courrier, cependant j'aimerais vraiment savoir si je peux les emballer dans le vrai moteur YSOD intégré d'ASP.NET et garder le formatage HTML.

Update1:

J'ai mes exceptions personnalisées (DupplicatedArbsException) qui retourne une vue avec le message que je considère "Exceptions gérées". Cependant, s'il s'agit d'une erreur réelle que je n'ai pas détectée, la vue Erreur s'affiche.

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

Le HandleError Lève ce qui ne fait rien actuellement.

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

..

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

L'exception soulevée en mode customErrors = "off" est le YSOD de asp.net. Cependant, quand je mets customErrors mode = "on" ces exceptions ne sont pas enveloppées dans son équivalent html mais seulement les messages d'exception (pas de html du tout).

+1

Pour aider dans votre recherche: la YSOD fait partie de la Moteur ASP.NET, pas le framework .NET. – Omar

+0

merci, je l'ai modifié –

Répondre

1

Vous pouvez gérer l'événement Application_Error dans global.asax qui est déclenché par le moteur ASP.NET chaque fois, une exception ne sont pas traités:

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

Comme je gère toutes les exceptions, l'erreur Application_Error n'est jamais levée. En outre, context.Server.GetLastError() est toujours null. –

+0

Si vous gérez toutes les exceptions, vous ne devriez jamais voir le YSOD. –

+0

Je veux juste intercepter l'exception YSOD, l'envoyer par e-mail à l'administrateur du site, puis envoyer le message non-YSOD à l'utilisateur. –

Questions connexes