2009-10-19 66 views
2

雖然調查another problem我遇到了一個奇怪的情況。儘管有IRequireSessionState/IReadOnlySessionState處理程序,ASP.NET會話仍爲NULL?

內的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爲空。

這怎麼可能?

回答

1

那時HttpContext.Current.Session很可能爲空。事件發生在會議的地點是正在獲得收購不保證,在這一點上它已經已得到獲得。你可能會鉤住這個事件的一個原因是你正在提供一個自定義模塊來實現你自己的Session對象。在這種情況下,這樣的自定義模塊將設置會話。

如果你想使用會話對象,你應該使用PostAquireRequestState事件。

0

在此方法中,Session對象尚未構建,因此無法訪問。嘗試使用此方法執行的任何方法中的工作。也許 Application_PreRequestHandlerExecute或者看看這個頁面看到Global.asax文件的方法執行順序 https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5771721.html

其餘的事件處理應用程序的請求,他們正在按照以下順序觸發:

* 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 
+0

有趣,因爲它一直在我的和許多其他機器上工作。 – 2009-10-19 12:50:57

+0

您是否使用AJAX調用?如果是這種情況,它可能是問題的來源 – fedotoves 2009-10-19 13:31:12

+1

對於服務器,AJAX調用有什麼不同? O_O – 2009-10-19 13:54:26