HttpContext.current.Session очищается на странице ошибки - PullRequest
1 голос
/ 23 апреля 2011

Я создал пользовательскую страницу ошибки для моего ASP.NET 4 приложения. Я поместил объект исключения в HttpContext.current.Session["CustomError"], но когда пользователь перенаправлен на страницу ошибки, HttpContext.current.Session["CustomError"] имеет значение null . Я делаю это в конструкторе класса CustomError так:

public CustomError(enExceptionType ExceptionType) : base(ExceptionMessage(ExceptionType)) { 
    HttpContext.Current.Session["CustomError"] = this; 
}

когда я перехожу через код Session ["Error"] содержит объект ошибки. есть идеи?

UPDATE:

Я удалил пользовательскую страницу ошибки из web.config и добавил ее в glabal.asax:

void Application_Error(object sender, EventArgs e)
{
    if (Context.IsCustomErrorEnabled)
    {
        Response.Redirect("~/Error.aspx");
    }
}

пошагово пройдя через эту функцию, я заметил, что когда генерируется исключение, эта функция вызывается два раза, в первый раз Session ["CustiomError"] содержит объект ошибки, но во второй раз его значение равно null.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2011

Это решило проблему, но я был бы признателен, если бы кто-нибудь сказал мне, почему:

void Application_Error(object sender, EventArgs e)
{
    if (Context.IsCustomErrorEnabled)
    {
        Response.Redirect("~/Error.aspx");
        **Server.ClearError();**
    }
}
0 голосов
/ 23 апреля 2011

Вместо использования Response.redirect(URL) (который, как я полагаю, у вас есть в вашем коде) используйте

Server.Transfer(URL)

или

Response.redirect(url, false)

Почему Server.Transfer(url)?

Перенос на другую страницу с помощью Server.Transfer экономит ресурсы сервера.Вместо того, чтобы сообщать браузеру о перенаправлении, он просто меняет «фокус» на веб-сервере и передает запрос.Это означает, что вы получаете не так много HTTP-запросов, что снижает нагрузку на ваш веб-сервер и ускоряет работу ваших приложений.

Источник здесь .

Пожалуйста, дайте мне знать, если один из них работает для вас.

ОБНОВЛЕНИЕ :

Если вы используете настройку веб-конфигурации, вы можете попробовать добавить значение ResponseWriteперенаправить режим var?

<customErrors mode="RemoteOnly" defaultRedirect="~/errors/GeneralError.aspx" redirectMode="ResponseRewrite" />

Если это все еще не работает, я предлагаю реализовать this (я сделал это в своем приложении, чтобы регистрировать ошибки в файлах журнала (для меня какadmin) и представляют общую ошибку пользователю ).

...