ASP.NET C # Application_Error в Global.asax не может получить доступ к переменным сеанса - PullRequest
4 голосов
/ 21 марта 2009

У меня есть настройка обработки ошибок, чтобы отслеживать все исключения и записывать необходимую нам информацию в базу данных, и отправлять разработчикам по электронной почте сообщения, которые должны знать об ошибке, чтобы исправить ее. Проблема, с которой я сталкиваюсь, заключается в том, что ошибка возникает до полной загрузки страницы. В этом случае переменные сеанса, которые я хочу отслеживать, недоступны в Application_Error. Поэтому я делаю следующее, чтобы не получить ошибку при обработке ошибок, но должен быть лучший способ. Также, если страница загружается и возникает ошибка при отправке формы, тогда доступны переменные сеанса.

try
{
    user_name = System.Web.HttpContext.Current.Session["User_Name"].ToString();
    user_number = System.Convert.ToInt32(System.Web.HttpContext.Current.Session["User_Number"].ToString());
}
catch (Exception ex)
{
    user_number = 0; 
    user_name = "N/A";     
}   

Любая помощь очень ценится. Спасибо!

Ответы [ 2 ]

4 голосов
/ 21 марта 2009

Нет ничего плохого в том, что вы делаете, хотя

if ( null != System.Web.HttpContext.Current.Session )

будет более "хирургическим", чем ваш блок try-catch.

Сеанс не инициализируется до события AcquireRequestState, поэтому любая ошибка, возникшая до этой точки, не будет иметь доступных переменных сеанса.

0 голосов
/ 21 марта 2009

Это то, что вам нужно сделать. Пользователь может перейти на любую страницу через закладку или, зная URL. Следовательно, пользователь может получить страницу до того, как будут установлены какие-либо значения. Вот что вам нужно сделать, чтобы код не сломался.

...