.net 类中的会话变量生成NullReferenceException
我有一个带有子例程的类,如下所示:.net 类中的会话变量生成NullReferenceException,.net,vb.net,class,session,nullreferenceexception,.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 '<--
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
Public子集权限()
如果为Nothing(HttpContext.Current.Session),则
出口接头
其他的
Dim会话作为HttpSessionState=HttpContext.Current.session
如果不是Nothing(session(“UserId”)),则“如果要尝试从Global.asax访问session
变量,则需要确保使用在为当前请求初始化session
后激发的事件。如果您查看,您将看到可以在Global.asax中连接几个事件(查看“请求由HttpApplication管道处理”一节中的事件列表)
如果将这些事件关联起来,您会发现会话
在引发应用程序请求状态
之前已初始化。如果您将代码移出应用程序\u AuthenticateRequest
并进入应用程序\u AcquisiteRequestState
,则它应能正常工作
请注意,我使用以下代码测试会话
何时将被初始化(对不起,C#)。我按照文档中的顺序连接了每个事件,Application\u acquisiteState
是我看到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 />");
}
void应用程序\u收单机构请求状态(对象发送方,事件参数e)
{
var session=HttpContext.Current.session;
Write(“应用程序状态:->会话为空:”;
Write(session==null);
响应。写入(“
”);
}
我无法在测试项目中重现这种行为。SetPermissions()
方法是否从运行在HttpContext.Current.Session
之前的HttpModule调用?在哪一行出现异常?可能HttpContext.Current为空,而不是HttpContext.Current.Session。@SteveWellens:对不起,原始帖子确实指出了错误发生的那一行,我在编辑格式化时不小心掉了它。现在又回来了。我明白了。反正有10次记过。我原来的问题/观点仍然有效。会话在您访问时是否为空?setPermissions在global.asax中被以下调用:“子应用程序\u AuthenticateRequest(发件人作为对象,e作为事件参数)如果Request.IsAuthenticated,则Dim\u权限作为新权限。UserPermissions\u权限。setPermissions()End If End Sub“嘿,Mate干杯,这似乎很管用,我在我的asax文件中选择了以下内容:子应用程序\u PostAcquireRequestState(),如果HttpContext.Current.Request.IsAuthentication,则将权限设置为新权限。UserPermissionsBLL\u permissions.SetPermissions(User.Identity.Name)如果结束子项,则结束