IHttpModule и Session
От: Михаил Евгеньевич  
Дата: 03.07.07 14:01
Оценка:
Имеется проблемка:
Делаю обработчик событий приложения. Начальство приказало убрать все из Global.asax в отдельный модуль. Делаю

public class ErrorModule : IHttpModule
    {
        public void Init(HttpApplication application)
        {
            application.Error += new EventHandler(application_Error);
        }
        public void application_Error(object sender, EventArgs e)
        {
            HttpApplication app = (HttpApplication)sender;    
            System.Web.SessionState.HttpSessionState Session = HttpContext.Current.Session;

            Exception exception = app.Server.GetLastError();

            if (null != exception)
            {
                Session[ErrorHelperStrings.BackUrl] = app.Request.UrlReferrer;
                Session[ErrorHelperStrings.ErrorMessage] = exception.Message;
                Session[ErrorHelperStrings.Exception] = exception;
            }
            app.Server.Transfer("~/ErrorPage.aspx");
        }

После трансфера на страничку ошибки берем сохраненные данные из сессии и выдаем отчет. Самое веселое начинается потом. На той страничке есть кнопочка возврата на страницу, где произошла ошибка. Когда на нее нажимаем и смотрим дебаггер — сессия пуста. Если убрать app.Server.Transfer из вышеприведенного кода то вообще никакие данные до страницы ошибки не дойдут.
Но это еще не всё
Если где-нить на Default.aspx поставить строчку Session["tra-ta-ta"] = "qwe" и уже потом баловаться с обработкой ошибок — сессия при обновлении ErrorPage не стирается, т.е. все работает как задумывалось.
Вопрос: где зарыта собака?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.