Vorremmo catturare solo l'uscita YSOD da utilizzare in una e-mail di segnalazione erorr, da un gestore degli errori Global.asax, per esempio. C'è un modo per sfruttare il generatore ysod integrato?La schermata gialla di morte ASP.NET (YSOD) può essere generata su richiesta o acquisita?
risposta
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.
Si consiglia di verificare ELMAH fa ciò che si sta chiedendo automaticamente.
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");
}
Avete sentito parlare di ELMAH? Potrebbe darvi tutte le caratteristiche che si vuole veramente ...
Ecco un post che spiega un po 'su di esso: http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx
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.
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.
- 1. dati personalizzati Elmah YSOD
- 2. metodo non può essere letta in classe generata Macro
- 3. Ridimensionare la casella gialla su Eclipse e mantenerla ridimensionata
- 4. Un riferimento non può essere NULL o può essere NULL?
- 5. java.lang.IllegalStateException: la richiesta non può essere eseguita; Stato reattore I/O: STOPPED
- 6. Senza utilizzare la ricorsione come può essere generata un'eccezione di overflow dello stack?
- 7. Evitare la morte del browser disordinato
- 8. Come mostrare la barra gialla ActiveX?
- 9. Errore: la variabile "non può essere acquisita implicitamente perché non è stata specificata alcuna modalità di acquisizione predefinita"
- 10. Timeout richiesta IIS su operazione ASP.NET lunga
- 11. Che cos'è la morte spuria in Android?
- 12. Asp.net MVC 4 su IIS6: "La pagina non può essere trovato"
- 13. cosa significa linea gialla jacoco
- 14. Il sito Web non può essere configurato correttamente; ottenere informazioni sul processo ASP.NET non riuscite. Richiesta
- 15. La libreria Libsndfile può essere utilizzata su iPhone iOS?
- 16. È Request.IsLocal sicuro o può essere falsificato?
- 17. VS2012 - Morte improvvisa
- 18. Un'app Web ASP.NET può essere eseguita senza web.config
- 19. nascondi Intellij Idea lampadina gialla
- 20. asp.net mvc 3 ottiene eccezione generata
- 21. JavaFX può essere utilizzato su Raspberry Pi
- 22. Come impostare la posizione per la foto acquisita usando UIImagePickerController?
- 23. Can ServletFileUpload.parseRequest() può essere chiamato una sola volta per richiesta?
- 24. Dove può essere posizionata la direttiva using nelle pagine di ASP.NET Razor?
- 25. Invoke o BeginInvoke non può essere chiamato su un controllo fino a quando la maniglia della finestra è stata creata
- 26. NInject può caricare moduli/assiemi su richiesta?
- 27. Android non può essere trovato su Mac
- 28. com.sun.xml.ws.message.saaj.SAAJHeader non può essere lanciato su com.sun.xml.ws.security.opt.impl.outgoing.SecurityHeader
- 29. La fatturazione in-app non funziona (la richiesta non può essere elaborata)
- 30. Fonte di richiesta asp.net/C#
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
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. –
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