我有一个带有子程序的类如下:
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
处理它的原因,但我的代码仍然在我身上发出错误。
有什么想法吗? 干杯
答案 0 :(得分:2)
如果您打算尝试从Global.asax访问Session
变量,则需要确保使用在为当前请求初始化Session
后触发的事件。如果您查看documentation on MSDN,您会看到可以在Global.asax中连接几个事件(请参阅“请求由HttpApplication管道处理”部分中的事件列表) )。
如果您将这些事件连接起来,您会发现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 />");
}