Nos gustaría simplemente capturar la salida de YSOD para usar en un correo electrónico de informe erorr, desde un controlador de errores Global.asax, por ejemplo. ¿Hay alguna manera de aprovechar el generador de ysod incorporado?¿Se puede generar o se puede capturar la pantalla amarilla de la muerte de ASP.NET (YSOD)?
Respuesta
Sí, hay una manera de que pueda hacerlo.
En el evento Application_Error en el global.archivo asax, obtenga la última excepción como System.HttpUnhandledException. Su código se verá así:
var lastException = Server.GetLastError() as HttpUnhandledException;
string Ysod = lastException.GetHtmlErrorMessage();
// your call to emailing routine follows
Acepto los comentarios de otras personas. También puedes hacer esto con ELMAH.
Debe verificar ELMAH hace lo que está preguntando automáticamente.
Diría que, en general, no desea que el usuario experimente el YSOD. Esto es algo que he puesto en aplicaciones web antes de capturar el error y luego permitir una página de error más elegante para el usuario ...
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");
}
¿Ha oído hablar de ELMAH? Puede ser que le dan todas las características que realmente quieres ...
Aquí es un blog que explica un poco sobre él: http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx
Me gustaría ver en ELMAH (Error Logging Modules and Handlers for ASP.NET):
ELMAH (Registro de errores Módulos y controladores ) es un error de toda la aplicación recurso de registro que es completamente conectable. Se puede agregar dinámicamente a una aplicación web ASP.NET en ejecución, o incluso todas las aplicaciones web ASP.NET en una máquina, sin necesidad de recompilar o redistribuir.
Una vez ELMAH se ha caído en una aplicación web corriendo y configurado apropiada, se obtienen los siguientes instalaciones sin cambiar una sola línea de de su código:
- registro de casi todas las excepciones no controladas.
- Una página web para ver de forma remota todo el registro de excepciones recodificadas.
- Una página web para ver de forma remota todos los detalles de una excepción registrada con .
- En muchos casos, puede revisar la pantalla amarilla original de la muerte que ASP.NET generó para una excepción dada , incluso con el modo customErrors apagado.
- Notificación por correo electrónico de cada error en el momento en que ocurre.
- Una fuente RSS de los últimos 15 errores del registro.
El evento Application_Error en el archivo Global.asax se activa cada vez que se produce una excepción no controlada en la aplicación. Puede obtener la última excepción que se produjo con el método Server.GetLastError().
Del mismo modo, puede crear su propia página de error personalizada especificando en el archivo web.config en la sección customErrors en el archivo web.config. Al especificar un archivo predeterminado, puede hacer cualquier codificación personalizada cuando una excepción se enruta allí.
- 1. YSOD pantalla amarilla de la muerte JavaScript RegExp - Error de sintaxis
- 2. ¿Cómo muestra el código de pantalla "Pantalla amarilla de la muerte" de ASP.NET?
- 3. ASP.NET pantalla amarilla de la muerte: ¿de dónde obtiene el seguimiento de la pila?
- 4. ¿Hay alguna implementación en alguna parte de la pantalla amarilla de la muerte?
- 5. ¿Cómo se puede generar una pantalla de carga en Android?
- 6. WCF/C# No se puede capturar EndpointNotFoundException
- 7. No se puede capturar la excepción C++ utilizando catch (...)
- 8. ¿Por qué no se puede capturar la excepción interna?
- 9. ¿Se puede redireccionar la salida bash -v?
- 10. CakePHP Pantalla blanca de la muerte
- 11. No se puede establecer la propiedad 'pantalla' de indefinido
- 12. No se puede ocultar la pantalla de bienvenida en Emacs
- 13. No se puede separar la sesión de pantalla
- 14. Registro de toda la pantalla amarilla de las muertes, aun cuando es un problema de compilación
- 15. ¿Cómo se puede capturar un evento de pegar contentEditable?
- 16. ¿Cuál es la causa raíz de Log4JLogger 'no se puede encontrar o no se puede usar?
- 17. No se puede generar la imagen, obtenida con image_style_url
- 18. ¿Se puede generar un makefile no recursivo?
- 19. ¿Se puede mover un UIPopoverController por la pantalla?
- 20. no puede generar la aplicación
- 21. QR code, se puede generar con R?
- 22. capturar la captura de pantalla utilizando .NET
- 23. httpErrors muestra 500 error en lugar de YSOD en la máquina local
- 24. No se puede actualizar la cookie en ASP.NET
- 25. ¿Cómo se puede saber si la sesión de la terminal actual está en la pantalla GNU?
- 26. Pantalla en blanco de la muerte de PHP
- 27. ¿Se puede limpiar la memoria?
- 28. ¿Se puede capturar una excepción nativa en el código C#?
- 29. "No se puede iniciar la depuración" - VS2010 ASP.NET MVC 2
- 30. No se puede obtener la sesión en webmethod en asp.net
3 años después y quién sabe por qué no quería usar ELMAH, pero esta es la respuesta que estaba buscando. No quería tomar otra dependencia en un proyecto ocupado que ya estaba desbordado con módulos de terceros, supongo. – nicknystrom
Exactamente lo que estaba buscando también, uso Elmah en mi proyecto, pero en el caso cuando el usuario es un administrador, quiero mostrar el YSOD detallado no solo el mensaje de error amigable. –
Usé Elmah, en otros proyectos, pero en este caso específicamente, quiero controlar el registro de errores, porque simplemente no se puso demasiado serio, ¡incluso para Elmah! Esto responde correctamente a la pregunta original y sigue en pie hoy * suspiro * – ppumkin