Как я могу поймать ошибку исключения 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
хорошо...понял...большое спасибо за помощь :)