Переменная сеанса в классе создает исключение NullReferenceException - PullRequest
2 голосов
/ 02 февраля 2012

У меня есть класс с подпрограммой следующим образом:

Public Sub SetPermissions()
    If IsNothing(HttpContext.Current.Session) Then
        Exit Sub
    Else
        Dim session As HttpSessionState = HttpContext.Current.Session
        If Not IsNothing(session("UserId")) Then '<-- exception occurs here
            'Do Stuff
        End If
    End If
End Sub

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

Есть идеи?Приветствия

1 Ответ

2 голосов
/ 02 февраля 2012

Если вы пытаетесь получить доступ к Session переменным из Global.asax, вам нужно убедиться, что вы используете событие, которое вызывается после инициализации Session для текущего запроса. Если вы посмотрите документацию на MSDN , вы увидите, что в Global.asax можно подключить несколько событий (см. Список событий в разделе «Запрос обрабатывается HttpApplication pipe ").

Если вы подключите эти события, вы обнаружите, что Session инициализируется до повышения Application_AcquireRequestState. Если вы переместите свой код из Application_AuthenticateRequest в Application_AcquireRequestState, он должен работать правильно.

Обратите внимание, что я использовал следующий код для проверки, когда Session будет инициализирован (C #, извините). Я связал каждое событие в порядке, указанном в документации, и Application_AcquireRequestState был первым событием, когда я увидел, как session == null оценивается как false.

void Application_AcquireRequestState(object sender, EventArgs e)
{
    var session = HttpContext.Current.Session;
    Response.Write("Application_AcquireRequestState: -> session is null: ");
    Response.Write(session == null);
    Response.Write("<br />");
}
...