ASP.NET会话为空,尽管有IRequireSessionState/IReadOnlySessionState处理程序?

ASP.NET会话为空,尽管有IRequireSessionState/IReadOnlySessionState处理程序?,asp.net,session,Asp.net,Session,在调查过程中,我遇到了一个特殊的情况 在Global.asax方法中,我有以下代码: protected void Application_AcquireRequestState(object sender, EventArgs e) { if (!(Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState)) // No session - no validation.

在调查过程中,我遇到了一个特殊的情况

在Global.asax方法中,我有以下代码:

protected void Application_AcquireRequestState(object sender, EventArgs e)
{
    if (!(Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState)) // No session - no validation.
        return;
    DoSomething();
}
DoSomething()
方法调用抛出一个
NullReferenceException
,非常简单,它唯一能做的就是在
HttpContext.Current.Session
为null时执行


这怎么可能呢?

当时
HttpContext.Current.Session
很可能是空的。事件在会话获取时触发。无法保证此时会话已被获取。您可能钩住此事件的一个原因是,您提供了一个自定义模块来实现自己的会话对象。在这里,这样一个自定义模块将设置会话


如果要使用会话对象,应使用
postQuireRequestState
事件。

在此方法中,会话对象尚未构造,因此无法访问。尝试使用在此方法之后执行的任何方法来完成工作。大概 Application_PreRequestHandlerExecute或查看此页面以查看global.asax文件中方法的执行顺序

其余事件处理应用程序请求,它们按以下顺序触发:

* Application_BeginRequest
* Application_AuthenticateRequest
* Application_AuthorizeRequest
* Application_ResolveRequestCache
* Application_AcquireRequestState
* Application_PreRequestHandlerExecute
* Application_PreSendRequestHeaders
* Application_PreSendRequestContent
* <<code is executed>>
* Application_PostRequestHandlerExecute
* Application_ReleaseRequestState
* Application_UpdateRequestCache
* Application_EndRequest
*应用程序\u开始请求
*应用程序验证请求
*申请书及申请书
*应用程序\u解析请求缓存
*应用程序请求状态
*应用程序\u PreRequestHandlerExecute
*应用程序\u呈现请求标头
*应用程序\u呈现请求内容
*<执行代码>
*应用程序\u PostRequestHandlerExecute
*应用程序\发布请求状态
*应用程序\u UpdateRequestCache
*应用程序请求

很有趣,因为它在我的机器和许多其他机器上都能正常工作。您使用的是AJAX调用吗?如果是这样的话,这可能是一个问题的根源。对于服务器来说,AJAX调用有什么不同?欧欧欧