Система.Исключение NullReferenceException при проверке if!= нулевой


Я использую обработчик ASHX, я хочу, чтобы обработчик проверил, если сессия != нулевой.

if (context.Session["Username"] != null)

И я получаю эту ошибку, указывая на эту строку:

Система.NullReferenceException: ссылка на объект не установлена на экземпляр объекта.

В чем проблема?

4 3

4 ответа:

if (context.Session["Username"] != null)

Реализует ли ваш обработчик IRequiresSessionState? В противном случае сеанс может быть недоступен.

Из MSDN:

Указывает, что целевой обработчик HTTP требуется доступ на чтение и запись к значения состояния сеанса. Это маркер. интерфейс и не имеет методов.

Используйте его вот так. Один из инкапсулирующих объектов может быть уже null:

if (context != null)
  if (context.Session != null)
    if (context.Session["Username"] != null) {
      // Do stuff
}

Да, я бы сказал, что сначала проверьте, не является ли контекст нулевым.

У меня была похожая проблема с Ан .файл ashx. Решение состояло в том, что обработчик должен реализовать IReadOnlySessionState (для доступа только для чтения) или IRequiresSessionState (для доступа только для чтения и записи). например:

public class myModule: IHttpHandler, IRequiresSessionState { ... }
Эти интерфейсы не нуждаются в дополнительном коде, но действуют как маркеры для фреймворка.

Надеюсь, что это поможет.

Джонатан