using System; using System.Text; using System.Web; using Scrummer.Code.Pages; namespace Scrummer.Code { public static class GlobalErrorHandler { #region Private methods private static void ShowInternalError(HttpContext context, Exception ex) { context.Response.StatusCode = 500; context.Response.Clear(); 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 - sbOutput.Length; if (fillResponse > 0) { sbOutput.Append(""); } context.Response.Write(sbOutput.ToString()); } #endregion #region Public methods public static void HandleError(HttpContext context, Exception ex) { try { IHttpHandler frmError = new FrmError(ex); context.Response.Clear(); context.Handler = frmError; frmError.ProcessRequest(context); } catch { ShowInternalError(context, ex); } } #endregion } }