/ / Fehler Seite nicht rendern - asp.net, routing, global-asax, benutzerdefinierte Fehler-Seiten, server.transfer

Fehler Seite nicht rendern - asp.net, routing, global-asax, benutzerdefinierte Fehler-Seiten, server.transfer

Also ich habe meine globale.asax Application_Error () Ereignis eingerichtet, um Fehler zu verarbeiten und dann eine Server.Transfer () auf eine benutzerdefinierte Fehlerseite. Wenn eine Ausnahme ausgelöst wird, kann ich den Codeschritt durch das Ereignis Application_Error beobachten und dann in das Ereignis Page_Load () meiner benutzerdefinierten Fehlerseite wechseln und den gesamten Code fehlerfrei durchgehen. Allerdings endet meine Fehlerseite niemals beim Rendern. Es bleibt nur auf der Seite, auf der ich war und es scheint, als wäre nichts passiert. Warum wird meine Fehlerseite nicht gerendert? Im Folgenden finden Sie den Code für mein Application_Error-Ereignis sowie das Page_Load-Ereignis der Fehlerseite.

    protected void Application_Error(object sender, EventArgs e)
{
Exception ex = HttpContext.Current.Server.GetLastError();

if (ex is HttpUnhandledException && ex.InnerException != null)
ex = ex.InnerException;

if (ex != null)
{
Guid errorID = Guid.NewGuid();
log.Error(string.Format("=====WEBSITE ERROR===== Error ID: {0}", errorID), ex);
Server.Transfer(string.Format("~/Pages/error.aspx?id={0}", errorID));
}
}

protected void Page_Load(object sender, EventArgs e)
{
string errorID = Request.QueryString["id"];
Exception ex = HttpContext.Current.Server.GetLastError();
if (ex is HttpUnhandledException && ex.InnerException != null)
ex = ex.InnerException;

lblErrorID.Text = errorID;

if (ex != null)
{
lblErrorMessage.Text = ex.Message;
lblStackTrace.Text = ex.StackTrace.Replace("n", "<br/>");
plcStackTrace.Visible = bool.Parse(System.Configuration.ConfigurationManager.AppSettings["displayStackTrace"]);
}
else
plcErrorData.Visible = false;
}

Bemerkenswert ist auch, dass ich Custom Routing macheüber das Application_Start-Ereignis und die Verwendung einer RouteConfig-Klasse. Dies sollte nicht beeinflussen, weil ich genau dasselbe auf einer anderen Website mache und es funktioniert wie ein Charme.

Antworten:

0 für die Antwort № 1

Nachdem Sie die Ausnahme behandelt haben, müssen Sie sie löschen. Rufen Sie einfach Server.ClearError () auf

protected void Page_Load(object sender, EventArgs e)
{
string errorID = Request.QueryString["id"];
Exception ex = HttpContext.Current.Server.GetLastError();
if (ex is HttpUnhandledException && ex.InnerException != null)
ex = ex.InnerException;

//This works
Server.ClearError();

lblErrorID.Text = errorID;

if (ex != null)
{
lblErrorMessage.Text = ex.Message;
lblStackTrace.Text = ex.StackTrace.Replace("n", "<br/>");
plcStackTrace.Visible = bool.Parse(System.Configuration.ConfigurationManager.AppSettings["displayStackTrace"]);
}
else
plcErrorData.Visible = false;
}