risposta

7

Sì, c'è un modo per farlo.

Nell'evento Application_Error nel globale.asax, ottieni l'ultima eccezione come System.HttpUnhandledException. Il tuo codice sarà simile a questa:

var lastException = Server.GetLastError() as HttpUnhandledException; 
string Ysod = lastException.GetHtmlErrorMessage(); 
// your call to emailing routine follows 

Sono d'accordo con i commenti di altre persone. Puoi farlo anche con ELMAH.

+0

3 anni avanti e chissà perché non volevo usare ELMAH, ma questa è la risposta che stavo certamente cercando. Non volevo prendere un'altra dipendenza in un progetto impegnativo già traboccante di moduli di terze parti, immagino. – nicknystrom

+1

Esattamente quello che stavo cercando, io uso Elmah nel mio progetto, ma nel caso in cui l'utente sia un amministratore, voglio mostrare il YSOD dettagliato non solo il messaggio di errore amichevole. –

+0

Ho usato Elmah, su altri progetti, ma in questo caso in particolare, voglio controllare la registrazione degli errori, perché sh! T è diventato troppo serio, anche per Elmah! Questo risponde alla domanda originale correttamente e si trova ancora oggi * sigh * – ppumkin

2

Si consiglia di verificare ELMAH fa ciò che si sta chiedendo automaticamente.

2

Direi in generale che non si desidera che l'utente verifichi l'YSOD. Questo è qualcosa che ho messo in applicazioni web, prima di catturare l'errore e quindi consentire per una pagina di errore più elegante per l'utente ...

protected void Application_Error(object sender, EventArgs e) 
{ 
    MailMessage msg = new MailMessage(); 
    HttpContext ctx = HttpContext.Current; 

    msg.To.Add(new MailAddress("[email protected]")); 
    msg.From = new MailAddress("[email protected]"); 
    msg.Subject = "My app had an issue..."; 
    msg.Priority = MailPriority.High; 

    StringBuilder sb = new StringBuilder(); 
    sb.Append(ctx.Request.Url.ToString() + System.Environment.NewLine); 
    sb.Append("Source:" + System.Environment.NewLine + ctx.Server.GetLastError().Source.ToString()); 
    sb.Append("Message:" + System.Environment.NewLine + ctx.Server.GetLastError().Message.ToString()); 
    sb.Append("Stack Trace:" + System.Environment.NewLine + ctx.Server.GetLastError().StackTrace.ToString()); 
    msg.Body = sb.ToString(); 

    //CONFIGURE SMTP OBJECT 
    SmtpClient smtp = new SmtpClient("myhost"); 

    //SEND EMAIL 
    smtp.Send(msg); 

    //REDIRECT USER TO ERROR PAGE 
    Server.Transfer("~/ErrorPage.aspx"); 
} 
9

vorrei guardare in ELMAH (Error Logging Modules and Handlers for ASP.NET):

ELMAH (Registrazione degli errori moduli e gestori) è un centro di registrazione degli errori a livello di applicazione che è completamente pluggable. Può essere aggiunto dinamicamente a un'applicazione Web ASP.NET in esecuzione, o anche a tutte le applicazioni Web ASP.NET su una macchina, senza necessità di ri-compilazione o ridistribuzione .

volta ELMAH è stato eliminato in un'applicazione web in esecuzione e configurato in modo appropriato , si ottengono i seguenti servizi senza cambiare una sola linea di codice:

  • registrazione di quasi tutte le eccezioni non gestite.
  • Una pagina web per visualizzare in remoto l'intero registro delle eccezioni ricodificati.
  • Una pagina Web per visualizzare in remoto i dettagli completi di qualsiasi eccezione registrata .
  • In molti casi, è possibile rivedere lo schermo giallo originale della morte che ASP.NET generato per un dato eccezione, anche con modalità customErrors disattivata.
  • Una notifica via e-mail di ogni errore nel momento in cui si verifica.
  • Un feed RSS degli ultimi 15 errori dal registro.
1

L'evento Application_Error nel file Global.asax viene attivata ogni volta che si verifica un'eccezione non gestita nell'applicazione. È possibile prendere l'ultima eccezione che si è verificata utilizzando il metodo Server.GetLastError().

Analogamente, è possibile creare la propria pagina di errore personalizzata specificandola in web.config nella sezione CustomErrors nel file web.config. Specificando un file predefinito, è possibile eseguire qualsiasi codifica personalizzata quando viene instradata un'eccezione.

Problemi correlati