/ / Error en la página que no se representa: asp.net, enrutamiento, asax global, páginas de error personalizadas, server.transfer

Página de error no representada: asp.net, enrutamiento, asax global, páginas de error personalizadas, server.transfer

Así que tengo mi global.asax Application_Error () evento configurado para procesar errores y luego hacer un Server.Transfer () a una página de error personalizada. Cuando se produce una excepción, puedo ver el paso del código a través del evento Application_Error, luego ingresar al evento Page_Load () de mi página de error personalizada y moverme a través de todo el código sin errores; Sin embargo mi página de error nunca termina renderizando. Simplemente permanece en la página en la que estaba y parece que no pasó nada. ¿Por qué mi página de error no se está procesando? A continuación se muestra el código para mi evento Application_Error, así como el evento Page_Load de la página de error.

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

También vale la pena señalar que estoy haciendo enrutamiento personalizadoa través del evento Application_Start y el uso de una clase RouteConfig. Esto no debería afectar esto porque hago exactamente lo mismo en otro sitio web y funciona como un encanto.

Respuestas

0 para la respuesta № 1

Después de manejar la excepción, tienes que borrarla. Simplemente llame a 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;
}