From c53c79b0c1ae791472d2468e3ffa68cdf5e35b00 Mon Sep 17 00:00:00 2001 From: "Valeriano A.R" Date: Mon, 25 May 2015 00:33:25 +0200 Subject: [PATCH] FrmError & GlobalErrorHandler: Show InnerExceptions --- Scrummer/Code/GlobalErrorHandler.cs | 28 ++++++++++++++++------- Scrummer/Code/Pages/FrmError.cs | 35 +++++++++++++++++------------ 2 files changed, 41 insertions(+), 22 deletions(-) diff --git a/Scrummer/Code/GlobalErrorHandler.cs b/Scrummer/Code/GlobalErrorHandler.cs index a1b3096..e24aa4d 100644 --- a/Scrummer/Code/GlobalErrorHandler.cs +++ b/Scrummer/Code/GlobalErrorHandler.cs @@ -1,4 +1,5 @@ using System; +using System.Text; using System.Web; using Scrummer.Code.Pages; @@ -12,28 +13,39 @@ namespace Scrummer.Code { context.Response.StatusCode = 500; context.Response.Clear(); - context.Response.Write("

Internal error

"); - context.Response.Write(String.Format("

Message: {0}

", ex.Message)); - context.Response.Write(String.Format("

StackTrace:

{0}
", ex.StackTrace)); + + StringBuilder sbOutput = new StringBuilder(); + sbOutput.Append("

Internal error

"); + Exception exAux = ex; + if (exAux is HttpUnhandledException && exAux.InnerException != null) { exAux = exAux.InnerException; } + while (exAux != null) + { + sbOutput.AppendFormat("

Message: {0}

", exAux.Message); + sbOutput.AppendFormat("

StackTrace:

{0}
", exAux.StackTrace); + exAux = exAux.InnerException; + } // Fill response to 512 bytes to avoid browser "beauty" response of errors. - long fillResponse = 512 - (ex.Message.Length + ex.StackTrace.Length); ; + long fillResponse = 512 - sbOutput.Length; if (fillResponse > 0) { - context.Response.Write(""); + sbOutput.Append("-->"); } + + context.Response.Write(sbOutput.ToString()); } #endregion #region Public methods - public static void HandleError(HttpContext context,Exception ex){ + public static void HandleError(HttpContext context, Exception ex) + { try { IHttpHandler frmError = new FrmError(ex); diff --git a/Scrummer/Code/Pages/FrmError.cs b/Scrummer/Code/Pages/FrmError.cs index 96ff6d0..9b40799 100644 --- a/Scrummer/Code/Pages/FrmError.cs +++ b/Scrummer/Code/Pages/FrmError.cs @@ -18,24 +18,31 @@ namespace Scrummer.Code.Pages void FrmError_Init(object sender, EventArgs e) { - Title = "Error"; + Title = "Application Error"; - CLabel lblErrorTitle = new CLabel { Text = "Error", Tag = "h2" }; + CLabel lblErrorTitle = new CLabel { Text = Title, Tag = "h2" }; Controls.Add(lblErrorTitle); + + Exception exAux = _ex; + if (exAux is HttpUnhandledException && exAux.InnerException != null) { exAux = exAux.InnerException; } + while (exAux != null) + { + CLabel lblMessage = new CLabel { Tag = "P" }; + lblMessage.Text = String.Format("{0}: {1}", "Message", HttpUtility.HtmlEncode(exAux.Message)); + Controls.Add(lblMessage); - CLabel lblMessage = new CLabel { Tag = "P" }; - lblMessage.Text = String.Format("{0}: {1}", "Message",HttpUtility.HtmlEncode(_ex.Message)); - Controls.Add(lblMessage); + CLabel lblStacktraceTitle = new CLabel { Tag = "p" }; + lblStacktraceTitle.Text = String.Format("{0}:", "Stacktrace"); + Controls.Add(lblStacktraceTitle); + Panel pnlStacktrace = new Panel(); + pnlStacktrace.CssClass = "divCode"; + Controls.Add(pnlStacktrace); + LiteralControl litStackTrace = new LiteralControl( + String.Format("
{0}
", HttpUtility.HtmlEncode(exAux.StackTrace))); + pnlStacktrace.Controls.Add(litStackTrace); - CLabel lblStacktraceTitle = new CLabel { Tag = "p" }; - lblStacktraceTitle.Text = String.Format("{0}:", "Stacktrace"); - Controls.Add(lblStacktraceTitle); - Panel pnlStacktrace = new Panel(); - pnlStacktrace.CssClass = "divCode"; - Controls.Add(pnlStacktrace); - LiteralControl litStackTrace = new LiteralControl( - String.Format("
{0}
", HttpUtility.HtmlEncode(_ex.StackTrace))); - pnlStacktrace.Controls.Add(litStackTrace); + exAux = exAux.InnerException; + } } } } \ No newline at end of file