Respuesta

7

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.

+0

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

+1

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. –

+0

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

2

Debe verificar ELMAH hace lo que está preguntando automáticamente.

2

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"); 
} 
9

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.
1

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í.

Cuestiones relacionadas