System.NullReferenceException При проверке, если!= Null

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

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

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

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

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

4 ответа

Решение
if (context.Session["Username"] != null)

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

Из MSDN:

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

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

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

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

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

public class myModule: IHttpHandler, IRequiresSessionState { ... }

Эти интерфейсы не нуждаются в дополнительном коде, но действуют как маркеры для платформы.

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

Джонатан

Другие вопросы по тегам