}
#if NET_2_0
- protected HttpException (SerializationInfo info, StreamingContext context)
+ protected
+#else
+ internal
+#endif
+ HttpException (SerializationInfo info, StreamingContext context)
: base (info, context)
{
http_code = info.GetInt32 ("_httpCode");
}
+#if NET_2_0
[SecurityPermission (SecurityAction.Demand, SerializationFormatter = true)]
public override void GetObjectData (SerializationInfo info, StreamingContext context)
{
http_code = httpCode;
}
- public HttpException (int httpCode, string message, Exception innerException, string resourceName)
+ internal HttpException (int httpCode, string message, Exception innerException, string resourceName)
: this (httpCode, message, innerException)
{
resource_name = resourceName;
public string GetHtmlErrorMessage ()
{
try {
- if (HttpContext.Current.IsCustomErrorEnabled)
- return GetCustomErrorDefaultMessage ();
+ HttpContext ctx = HttpContext.Current;
+ if (ctx != null && ctx.IsCustomErrorEnabled) {
+ if (http_code != 404 && http_code != 403)
+ return GetCustomErrorDefaultMessage ();
+ else
+ return GetDefaultErrorMessage (false);
+ }
if (!(this.InnerException is HtmlizedException))
- return GetDefaultErrorMessage ();
+ return GetDefaultErrorMessage (true);
return GetHtmlizedErrorMessage ();
} catch (Exception ex) {
void WriteFileTop (StringBuilder builder, string title)
{
+#if TARGET_J2EE
+ builder.AppendFormat ("<html><head><title>{0}</title><style type=\"text/css\">", title);
+ builder.AppendFormat (
+ @"body {{font-family:{0};font-weight:normal;font-size: 9pt;color:black;background-color: white}}
+p {{font-family:{0};font-weight:normal;color:black;margin-top: -5px}}
+b {{font-family:{0};font-weight:bold;color:black;margin-top: -5px}}
+h1 {{ font-family:{0};font-weight:normal;font-size:18pt;color:red }}
+h2 {{ font-family:{0};font-weight:normal;font-size:14pt;color:maroon }}
+pre {{font-family:""Lucida Console"",""DejaVu Sans Mono"",monospace;font-size: 10pt}}
+div.bodyText {{font-family: {0}}}
+table.sampleCode {{width: 100%; background-color: #ffffcc; }}
+.errorText {{color: red; font-weight: bold}}
+.marker {{font-weight: bold; color: black;text-decoration: none;}}
+.version {{color: gray;}}
+.error {{margin-bottom: 10px;}}
+.expandable {{ text-decoration:underline; font-weight:bold; color:navy; cursor:pointer; }}", errorStyleFonts);
+#else
builder.Append ("<?xml version=\"1.0\" ?>\n");
builder.Append ("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
builder.AppendFormat ("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\"><head><title>{0}</title><style type=\"text/css\">", title);
b {{font-family:{0};font-weight:bold;color:black;margin-top: -5px}}
h1 {{ font-family:{0};font-weight:normal;font-size:18pt;color:red }}
h2 {{ font-family:{0};font-weight:normal;font-size:14pt;color:maroon }}
-pre {{font-family:""Lucida Console"",""DejaVu Sans Mono"",monospace;font-size: 0.9em}}
+pre,code {{font-family:""Lucida Console"",""DejaVu Sans Mono"",monospace;font-size: 0.9em,white-space: pre-line}}
div.bodyText {{font-family: {0}}}
table.sampleCode {{width: 100%; background-color: #ffffcc; }}
.errorText {{color: red; font-weight: bold}}
.version {{color: gray;}}
.error {{margin-bottom: 10px;}}
.expandable {{ text-decoration:underline; font-weight:bold; color:navy; cursor:pointer; }}", errorStyleFonts);
+#endif
builder.AppendFormat (
"</style></head><body><h1>Server Error in '{0}' Application</h1><hr style=\"color: silver\"/>",
HtmlEncode (HttpRuntime.AppDomainAppVirtualPath));
}
- void WriteFileBottom (StringBuilder builder)
+ void WriteFileBottom (StringBuilder builder, bool showTrace)
{
- builder.Append ("<hr style=\"color: silver\"/>");
- builder.AppendFormat ("<strong>Version information: </strong> Mono Version: {0}; ASP.NET Version: {0}</body></html>\r\n<!--", Environment.Version);
+ if (showTrace) {
+ builder.Append ("<hr style=\"color: silver\"/>");
+ builder.AppendFormat ("<strong>Version information: </strong> Mono Version: {0}; ASP.NET Version: {0}</body></html>\r\n", Environment.Version);
- string trace, message;
- bool haveTrace;
- Exception ex = this;
-
- while (ex != null) {
- trace = ex.StackTrace;
- message = ex.Message;
- haveTrace = (trace != null && trace.Length > 0);
+ string trace, message;
+ bool haveTrace;
+ Exception ex = this;
+
+ builder.Append ("\r\n<!--");
+ while (ex != null) {
+ trace = ex.StackTrace;
+ message = ex.Message;
+ haveTrace = (trace != null && trace.Length > 0);
- if (!haveTrace && (message == null || message.Length == 0)) {
- ex = ex.InnerException;
- continue;
- }
+ if (!haveTrace && (message == null || message.Length == 0)) {
+ ex = ex.InnerException;
+ continue;
+ }
- builder.Append ("\r\n[" + ex.GetType () + "]: " + HtmlEncode (message) + "\r\n");
- if (haveTrace)
- builder.Append (ex.StackTrace);
+ builder.Append ("\r\n[" + ex.GetType () + "]: " + HtmlEncode (message) + "\r\n");
+ if (haveTrace)
+ builder.Append (ex.StackTrace);
- ex = ex.InnerException;
- }
+ ex = ex.InnerException;
+ }
- builder.Append ("\r\n-->");
+ builder.Append ("\r\n-->");
+ } else
+ builder.Append ("</body></html>\r\n");
}
string GetCustomErrorDefaultMessage ()
</system.web>
</configuration></pre></td></tr></table>");
- WriteFileBottom (builder);
+ WriteFileBottom (builder, false);
return builder.ToString ();
}
- string GetDefaultErrorMessage ()
+ string GetDefaultErrorMessage (bool showTrace)
{
Exception ex, baseEx;
ex = baseEx = GetBaseException ();
if (http_code == 404)
builder.Append ("The resource cannot be found.");
else
- builder.AppendFormat (HtmlEncode (ex.Message));
+ builder.Append (HtmlEncode (ex.Message));
builder.Append ("</em></h2>\r\n<p><strong>Description: </strong>");
if (http_code != 0)
builder.Append ("</p>\r\n");
if (resource_name != null && resource_name.Length > 0)
- builder.AppendFormat ("<p><strong>Resource URL: </strong>{0}</p>\r\n", resource_name);
+ builder.AppendFormat ("<p><strong>Requested URL: </strong>{0}</p>\r\n", resource_name);
- if (baseEx != null && http_code != 404) {
+ if (showTrace && baseEx != null && http_code != 404 && http_code != 403) {
builder.Append ("<p><strong>Stack Trace: </strong></p>");
builder.Append ("<table summary=\"Stack Trace\" class=\"sampleCode\">\r\n<tr><td>");
WriteTextAsCode (builder, baseEx.ToString ());
builder.Append ("</td></tr>\r\n</table>\r\n");
}
- WriteFileBottom (builder);
+ WriteFileBottom (builder, showTrace);
return builder.ToString ();
}
WriteFileTop (builder, exc.Title);
builder.AppendFormat ("<h2><em>{0}</em></h2>\r\n", exc.Title);
builder.AppendFormat ("<p><strong>Description: </strong>{0}\r\n</p>\r\n", HtmlEncode (exc.Description));
- string errorMessage = HtmlEncode (exc.ErrorMessage).Replace ("\n", "<br/>");
+ string errorMessage = HtmlEncode (exc.ErrorMessage);
builder.Append ("<p><strong>");
if (isParseException)
else if (isCompileException)
builder.Append ("Compiler ");
- builder.AppendFormat ("Error Message: </strong>{0}</p>", errorMessage);
+ builder.Append ("Error Message: </strong>");
+#if NET_2_0
+ builder.AppendFormat ("<code>{0}</code></p>", errorMessage);
+#else
+ builder.AppendFormat ("<blockquote><pre>{0}</pre></blockquote></p>", errorMessage);
+#endif
StringBuilder longCodeVersion = null;
else
builder.Append (exc.FileName);
- if ((isParseException || isCompileException) && exc.ErrorLines.Length > 0) {
- builder.Append (" <strong>Line: </strong>");
- builder.Append (exc.ErrorLines [0]);
+ if (isParseException || isCompileException) {
+ int[] errorLines = exc.ErrorLines;
+ int numErrors = errorLines != null ? errorLines.Length : 0;
+ if (numErrors > 0) {
+ builder.AppendFormat (" <strong>Line{0}: </strong>", numErrors > 1 ? "s" : String.Empty);
+ for (int i = 0; i < numErrors; i++) {
+ if (i > 0)
+ builder.Append (", ");
+ builder.Append (exc.ErrorLines [i]);
+ }
+ }
}
builder.Append ("</p>");
} else if (exc.FileName != null)
StringBuilder sb = new StringBuilder ();
foreach (string s in output)
sb.Append (s + "\r\n");
- WriteExpandableBlock (builder, "Show Detailed Compiler Output", sb.ToString ());
+ WriteExpandableBlock (builder, "compilerOutput", "Show Detailed Compiler Output", sb.ToString ());
}
}
#endif
if (longCodeVersion != null && longCodeVersion.Length > 0) {
- WriteExpandableBlock (builder, "Show Complete Compilation Source", longCodeVersion.ToString ());
+ WriteExpandableBlock (builder, "fullCode", "Show Complete Compilation Source", longCodeVersion.ToString ());
needToggleJS = true;
}
"}\r\n" +
"</script>\r\n");
- WriteFileBottom (builder);
+ WriteFileBottom (builder, true);
return builder.ToString ();
}
- static void WriteExpandableBlock (StringBuilder builder, string title, string contents)
+ static void WriteExpandableBlock (StringBuilder builder, string id, string title, string contents)
{
- builder.AppendFormat ("<br><div class=\"expandable\" onclick=\"ToggleVisible ('fullCode')\">{0}:</div><br/>" +
- "<div id=\"fullCode\" style=\"display: none\"><table summary=\"Details\" class=\"sampleCode\"><tr><td>" +
- "<code><pre>\r\n", title);
+ builder.AppendFormat ("<br><div class=\"expandable\" onclick=\"ToggleVisible ('{1}')\">{0}:</div><br/>" +
+ "<div id=\"{1}\" style=\"display: none\"><table summary=\"Details\" class=\"sampleCode\"><tr><td>" +
+ "<code><pre>\r\n", title, id);
builder.Append (contents);
builder.Append ("</pre></code></td></tr></table></div>");
}