/ / Rendu de page d'erreur - asp.net, routage, global-asax, pages d'erreur personnalisées, server.transfer

Erreur de rendu de la page d'erreur - asp.net, routage, asax global, pages d'erreur personnalisées, serveur.transfert

J'ai donc mon global.L'événement asax Application_Error () est configuré pour traiter les erreurs, puis lance un Server.Transfer () sur une page d'erreur personnalisée. Lorsqu'une exception est générée, je peux suivre l'évolution du code dans l'événement Application_Error, puis accéder à l'événement Page_Load () de ma page d'erreur personnalisée et parcourir l'ensemble du code sans erreur. Cependant, ma page d'erreur ne finit jamais par être rendue. Cela reste juste sur la page sur laquelle j'étais et on dirait que rien ne s'est passé. Pourquoi ma page d'erreur ne s'affiche-t-elle pas? Vous trouverez ci-dessous le code de mon événement Application_Error ainsi que l'événement Page_Load de la page d'erreur.

    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;
}

Aussi, il est à noter que je fais du routage personnalisévia l'événement Application_Start et l'utilisation d'une classe RouteConfig. Cela ne devrait pas affecter cela parce que je fais exactement la même chose sur un autre site Web et que cela fonctionne à merveille.

Réponses:

0 pour la réponse № 1

Après avoir géré l'exception, vous devez la supprimer. Il suffit d'appeler Server.ClearError ()

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;
}