Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 类中的会话变量生成NullReferenceException_.net_Vb.net_Class_Session_Nullreferenceexception - Fatal编程技术网

.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)如果结束子项,则结束