类中的Session变量产生NullReferenceException

时间:2012-02-02 03:02:52

标签: .net vb.net class session nullreferenceexception

我有一个带有子程序的类如下:

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 个答案:

答案 0 :(得分:2)

如果您打算尝试从Global.asax访问Session变量,则需要确保使用在为当前请求初始化Session后触发的事件。如果您查看documentation on MSDN,您会看到可以在Global.asax中连接几个事件(请参阅“请求由HttpApplication管道处理”部分中的事件列表) )。

如果您将这些事件连接起来,您会发现SessionApplication_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 />");
}