void Render(ExceptionPageTemplateValues values, ExceptionPageTemplateType pageType, Action <string> writer) { if (fragments == null || fragments.Count == 0 || values.Count == 0) { return; } InitFragments(values); string value; foreach (ExceptionPageTemplateFragment fragment in fragments) { if (fragment == null || (fragment.ValidForPageType & pageType) == 0) { continue; } value = values.Get(fragment.Name); if (value == null || !fragment.Visible(values)) { continue; } writer(fragment.ReplaceMacros(value, values)); } }
public string Render (ExceptionPageTemplateValues values, ExceptionPageTemplateType pageType) { if (values == null) throw new ArgumentNullException ("values"); var sb = new StringBuilder (); Render (values, pageType, (string text) => { sb.Append (text); }); return sb.ToString (); }
public string Render(ExceptionPageTemplateValues values, ExceptionPageTemplateType pageType) { if (values == null) { throw new ArgumentNullException("values"); } var sb = new StringBuilder(); Render(values, pageType, (string text) => { sb.Append(text); }); return(sb.ToString()); }
public ExceptionPageTemplateFragment() { ValidForPageType = ExceptionPageTemplateType.Any; }
void FillHtmlizedErrorValues(ExceptionPageTemplateValues values, HtmlizedException exc, ref ExceptionPageTemplateType pageType) { bool isParseException = exc is ParseException; bool isCompileException = (!isParseException && exc is CompilationException); values.Add(ExceptionPageTemplate.Template_PageTitleName, HtmlEncode(exc.Title)); values.Add(ExceptionPageTemplate.Template_DescriptionName, HtmlEncode(exc.Description)); values.Add(ExceptionPageTemplate.Template_StackTraceName, HtmlEncode(exc.StackTrace)); values.Add(ExceptionPageTemplate.Template_ExceptionTypeName, exc.GetType().ToString()); values.Add(ExceptionPageTemplate.Template_ExceptionMessageName, HtmlEncode(exc.Message)); values.Add(ExceptionPageTemplate.Template_DetailsName, HtmlEncode(exc.ErrorMessage)); string origin; if (isParseException) { origin = "Parser"; } else if (isCompileException) { origin = "Compiler"; } else { origin = "Other"; } values.Add(ExceptionPageTemplate.Template_HtmlizedExceptionOriginName, origin); if (exc.FileText != null) { pageType |= ExceptionPageTemplateType.SourceError; StringBuilder shortSource = new StringBuilder(); StringBuilder longSource; if (isCompileException) { longSource = new StringBuilder(); } else { longSource = null; } FormatSource(shortSource, longSource, exc); values.Add(ExceptionPageTemplate.Template_HtmlizedExceptionShortSourceName, shortSource.ToString()); values.Add(ExceptionPageTemplate.Template_HtmlizedExceptionLongSourceName, longSource != null ? longSource.ToString() : null); if (exc.SourceFile != exc.FileName) { values.Add(ExceptionPageTemplate.Template_HtmlizedExceptionSourceFileName, FormatSourceFile(exc.SourceFile)); } else { values.Add(ExceptionPageTemplate.Template_HtmlizedExceptionSourceFileName, FormatSourceFile(exc.FileName)); } if (isParseException || isCompileException) { int[] errorLines = exc.ErrorLines; int numErrors = errorLines != null ? errorLines.Length : 0; var lines = new StringBuilder(); for (int i = 0; i < numErrors; i++) { if (i > 0) { lines.Append(", "); } lines.Append(errorLines [i]); } values.Add(ExceptionPageTemplate.Template_HtmlizedExceptionErrorLinesName, lines.ToString()); } } else { values.Add(ExceptionPageTemplate.Template_HtmlizedExceptionSourceFileName, FormatSourceFile(exc.FileName)); } if (isCompileException) { CompilationException cex = exc as CompilationException; StringCollection output = cex.CompilerOutput; if (output != null && output.Count > 0) { pageType |= ExceptionPageTemplateType.CompilerOutput; var sb = new StringBuilder(); bool first = true; foreach (string s in output) { sb.Append(HtmlEncode(s)); if (first) { sb.Append("<br/>"); first = false; } sb.Append("<br/>"); } values.Add(ExceptionPageTemplate.Template_HtmlizedExceptionCompilerOutputName, sb.ToString()); } } }
public string GetHtmlErrorMessage() { var values = new ExceptionPageTemplateValues(); ExceptionPageTemplate template = PageTemplate; try { values.Add(ExceptionPageTemplate.Template_RuntimeVersionInformationName, RuntimeHelpers.MonoVersion); values.Add(ExceptionPageTemplate.Template_AspNetVersionInformationName, Environment.Version.ToString()); HttpContext ctx = HttpContext.Current; ExceptionPageTemplateType pageType = ExceptionPageTemplateType.Standard; if (ctx != null && ctx.IsCustomErrorEnabled) { if (http_code != 404 && http_code != 403) { FillDefaultCustomErrorValues(values); pageType = ExceptionPageTemplateType.CustomErrorDefault; } else { FillDefaultErrorValues(false, false, null, values); } } else { Exception ex = GetBaseException(); if (ex == null) { ex = this; } values.Add(ExceptionPageTemplate.Template_FullStackTraceName, FormatFullStackTrace()); HtmlizedException htmlException = ex as HtmlizedException; if (htmlException == null) { FillDefaultErrorValues(true, true, ex, values); } else { pageType = ExceptionPageTemplateType.Htmlized; FillHtmlizedErrorValues(values, htmlException, ref pageType); } } return(template.Render(values, pageType)); } catch (Exception ex) { Console.Error.WriteLine("An exception has occurred while generating HttpException page:"); Console.Error.WriteLine(ex); Console.Error.WriteLine(); Console.Error.WriteLine("The actual exception which was being reported was:"); Console.Error.WriteLine(this); // we need the try/catch block in case the // problem was with MapPath, which will cause // IsCustomErrorEnabled to throw an exception try { FillDefaultCustomErrorValues(values); return(template.Render(values, ExceptionPageTemplateType.CustomErrorDefault)); } catch { return(DoubleFaultExceptionMessage); } } }
public ExceptionPageTemplateFragment () { ValidForPageType = ExceptionPageTemplateType.Any; }
void FillHtmlizedErrorValues (ExceptionPageTemplateValues values, HtmlizedException exc, ref ExceptionPageTemplateType pageType) { bool isParseException = exc is ParseException; bool isCompileException = (!isParseException && exc is CompilationException); values.Add (ExceptionPageTemplate.Template_PageTitleName, HtmlEncode (exc.Title)); values.Add (ExceptionPageTemplate.Template_DescriptionName, HtmlEncode (exc.Description)); values.Add (ExceptionPageTemplate.Template_StackTraceName, HtmlEncode (exc.StackTrace)); values.Add (ExceptionPageTemplate.Template_ExceptionTypeName, exc.GetType ().ToString ()); values.Add (ExceptionPageTemplate.Template_ExceptionMessageName, HtmlEncode (exc.Message)); values.Add (ExceptionPageTemplate.Template_DetailsName, HtmlEncode (exc.ErrorMessage)); string origin; if (isParseException) origin = "Parser"; else if (isCompileException) origin = "Compiler"; else origin = "Other"; values.Add (ExceptionPageTemplate.Template_HtmlizedExceptionOriginName, origin); if (exc.FileText != null) { pageType |= ExceptionPageTemplateType.SourceError; StringBuilder shortSource = new StringBuilder (); StringBuilder longSource; if (isCompileException) longSource = new StringBuilder (); else longSource = null; FormatSource (shortSource, longSource, exc); values.Add (ExceptionPageTemplate.Template_HtmlizedExceptionShortSourceName, shortSource.ToString ()); values.Add (ExceptionPageTemplate.Template_HtmlizedExceptionLongSourceName, longSource != null ? longSource.ToString () : null); if (exc.SourceFile != exc.FileName) values.Add (ExceptionPageTemplate.Template_HtmlizedExceptionSourceFileName, FormatSourceFile (exc.SourceFile)); else values.Add (ExceptionPageTemplate.Template_HtmlizedExceptionSourceFileName, FormatSourceFile (exc.FileName)); if (isParseException || isCompileException) { int[] errorLines = exc.ErrorLines; int numErrors = errorLines != null ? errorLines.Length : 0; var lines = new StringBuilder (); for (int i = 0; i < numErrors; i++) { if (i > 0) lines.Append (", "); lines.Append (errorLines [i]); } values.Add (ExceptionPageTemplate.Template_HtmlizedExceptionErrorLinesName, lines.ToString ()); } } else values.Add (ExceptionPageTemplate.Template_HtmlizedExceptionSourceFileName, FormatSourceFile (exc.FileName)); if (isCompileException) { CompilationException cex = exc as CompilationException; StringCollection output = cex.CompilerOutput; if (output != null && output.Count > 0) { pageType |= ExceptionPageTemplateType.CompilerOutput; var sb = new StringBuilder (); bool first = true; foreach (string s in output) { sb.Append (HtmlEncode (s)); if (first) { sb.Append ("<br/>"); first = false; } sb.Append ("<br/>"); } values.Add (ExceptionPageTemplate.Template_HtmlizedExceptionCompilerOutputName, sb.ToString ()); } } }
public void Render (HttpResponse response, ExceptionPageTemplateValues values, ExceptionPageTemplateType pageType) { if (response == null) return; if (values == null) throw new ArgumentNullException ("values"); Render (values, pageType, (string text) => { response.Write (text); }); }
void Render (ExceptionPageTemplateValues values, ExceptionPageTemplateType pageType, Action <string> writer) { if (fragments == null || fragments.Count == 0 || values.Count == 0) return; InitFragments (values); string value; foreach (ExceptionPageTemplateFragment fragment in fragments) { if (fragment == null || (fragment.ValidForPageType & pageType) == 0) continue; value = values.Get (fragment.Name); if (value == null || !fragment.Visible (values)) continue; writer (fragment.ReplaceMacros (value, values)); } }
public void Render(HttpResponse response, ExceptionPageTemplateValues values, ExceptionPageTemplateType pageType) { if (response == null) { return; } if (values == null) { throw new ArgumentNullException("values"); } Render(values, pageType, (string text) => { response.Write(text); }); }