/ / Сторінка помилки не відображається - asp.net, маршрутизація, global-asax, custom-error-pages, сервер.

Сторінка помилки не рендеринга - asp.net, маршрутизація, global-asax, сторінки зі спеціальними помилками, server.transfer

Так що я маю глобальний.asax Application_Error () подія налаштована на обробку помилок, а потім виконує Server.Transfer () на користувацьку сторінку помилок. Коли виникає виняток, я можу спостерігати за кроком коду через подію Application_Error, а потім перейти до події Page_Load () моєї сторінки власних помилок і перейти через весь код без помилок; однак моя сторінка помилок ніколи не закінчується рендеринга. Це тільки залишається на сторінці я був на та це буде схоже на нічого не відбулося. Чому моя сторінка помилок не відображається? Нижче наведено код для моєї події Application_Error, а також подія Page_Load сторінки помилки.

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

Також варто відзначити, що я роблю спеціальну маршрутизаціючерез подію Application_Start і використання класу RouteConfig. Це не повинно впливати на це, тому що я роблю це точно на іншому веб-сайті, і він працює як шарм.

Відповіді:

0 для відповіді № 1

Після обробки виключення, ви повинні очистити його. Просто зателефонуйте 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;
}