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));
            }
        }
Example #2
0
		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());
        }
Example #4
0
 public ExceptionPageTemplateFragment()
 {
     ValidForPageType = ExceptionPageTemplateType.Any;
 }
Example #5
0
        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());
                }
            }
        }
Example #6
0
        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;
		}
Example #8
0
		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 ());
				}
			}
		}
Example #9
0
		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);
			});
		}
Example #10
0
		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);
            });
        }