Palash Sachan Ответов: 0

Как я могу поймать ошибку исключения session null для всех страниц в ASP.NET?


всем привет,
я новичок в обучении asp.net и с#

Я использую Session["variables"] я мой проект для хранения пользовательских данных в течение некоторого времени
но когда-нибудь во время проверки page_load любить
if (string.IsNullOrEmpty(Session["Username"] as string))
{
     //Some Stuff to initialize the variable
}


Я получаю ошибку
System.NullReferenceException: Object reference not set to an instance of an object.


пожалуйста сказать мне

Q1. как мне поймать эту ошибку и проигнорировать ее или инициализировать и продолжить?
или
Q2. как я могу инициализировать Session["variables"] каждый раз, когда веб-сайт загружается в клиентскую машину, чтобы я мог инициализировать его и не получить ошибку?

пожалуйста помочь
спасибо

Что я уже пробовал:

пробовал хранить данные в виде глобальных переменных, но это работает не идеально.

Richard Deeming

Вам нужно начать с выяснения того, какой объект является null.

Основываясь на опубликованном вами коде, вы получите только NullReferenceException если Session является null... Но ... Page.Session собственность никогда не вернется null - если состояние сеанса отключено для страницы, это вызовет HttpException вместо.

Поэтому представляется весьма маловероятным, что строка кода, которую вы опубликовали, является источником исключения. Дважды проверьте трассировку стека исключения, а также проверьте окружающие строки на случай, если номер строки неверен.

Palash Sachan

я знаю, какие объекты сеанса являются нулевыми при загрузке страницы, и поэтому я проверяю его, что если он равен нулю, то сделайте что-нибудь ... но это дает ошибку
знаете ли вы, как я могу инициализировать переменную сеанса, когда веб-сайт загружается на клиентский компьютер?

Richard Deeming

Как я уже сказал, код, который вы опубликовали, не будет генерировать NullReferenceException. Вы вероятно получить HttpException если состояние сеанса отключено, но вы не получите NullReferenceException.

(Там был ошибка в .NET 2.0 RTM где string.IsNullOrEmpty бросил бы NullReferenceException; но это было исправлено в SP1, который был выпущен в 2011 году.)

Как я уже сказал, код, который вы показали, не несет ответственности за исключение, которое вы видите. Вам нужно отследить код, который является ответственный, и исправь это.

Palash Sachan

да, но он показывает ошибку...я не знаю, почему он показывает ошибку, когда все в порядке..в любом случае спасибо за помощь :)

Richard Deeming

Как я уже сказал, проверьте трассировку стека исключения. Это должно сказать вам, какая строка в каком файле вызвала исключение. С ASP.NET, номер строки иногда может быть на пару строк меньше, так что проверьте и окружающие строки.

Если вы можете воспроизвести ошибку, отладьте свой код. Visual Studio сломается на линии, где произошла ошибка, и вы сможете проверить переменные, чтобы увидеть, что происходит. null когда этого не должно быть.

F-ES Sitecore

Если вас беспокоят неинициализированные переменные сеанса, то решение состоит в том, чтобы инициализировать их с помощью события Session_Start в global.asax. Таким образом, если кто-то некоторое время бездействовал, а затем продолжил просматривать ваш сайт, он снова запустит сеанс и переменные будут инициализированы. В качестве альтернативы вы просто обрабатываете его каждый раз, когда получаете доступ к переменной сеанса;

if (Session ["xyz"] = = null)
{
// переменная не инициализирована
}

Palash Sachan

OMG.."Session_Start" в Global.asax работал
я добавил туда новый сеанс вроде этого

охраняемых недействительными, если же нет(объект отправителя, EventArgs в электронной)
{
Сессия.Добавить ("UsernameAvailable", " false");
}
а затем проверил содержимое страницы page_load
большое спасибо, сэр...теперь он работает :)

1 вопрос - когда срабатывает этот session_start, а когда нет??
пожалуйста скажите

F-ES Sitecore

Он срабатывает, когда пользователь запрашивает страницу aspx с вашего сайта и у него нет активного сеанса. Таким образом, они впервые просматривают сайт и возвращаются на него после истечения срока действия сеанса.

Palash Sachan

хорошо...понял...большое спасибо за помощь :)

0 Ответов