2012-03-29 33 views
1

在我的ASP.NET應用程序中,我有一個將所有異常記錄到文件(使用Application_Error()global.asax)的過程。在那個過程中,我記錄了幾個東西,比如當前的日期時間,用戶名等。在Web應用程序中,當「無法找到資源」異常時,當前會話爲空

但是,如果某人(已記錄)嘗試訪問不存在的頁面(例如:http://www.mywebsite.com/foo.aspx),則無法從過程訪問當前用戶名信息,因爲System.Web.HttpContext.Current.Session爲空,所以它工作正常。起初,我認爲會議已經失敗。這是不正確的,因爲如果我按回來,我仍然可以使用該網站(鏈接仍然工作,而不被重定向到登錄頁面)。

如果沒有找到資源,會話爲空的原因是什麼?是否因爲會話對象只有在知道要傳遞哪個頁面後才由asp初始化?或者可能是我的網站上沒有正確配置的東西?

回答

3

看看在ASP.NET事件生命週期:

http://msdn.microsoft.com/en-us/library/bb470252.aspx

特別是,如何HttpApplication處理您的請求。請注意,在BeginRequest(編號3)和AcquireRequestState(編號12)之前,至少有一些重要事件。

然後,您的會話只有AcquireRequestState。如果您在之前的某個事件中有任何錯誤,您將在Session上獲得空引用。

「資源未找到」僅僅是一個例子,但通常您必須準備Session僅在處理管道的早期事件中不可用。

0

Session屬於HttpContextHttpContext如果沒有頁面,則不會創建。

如果您的所有日誌條目的會話ID是強制性的,您可能需要創建一個自定義404頁面並在那裏登錄。

1

如果您的應用程序正在拋出類似HTTP 404(File Not Found)的錯誤,則會話始終爲空。原因是HttpContext對象是在頁面請求期間由ASP.NET創建的。由於沒有找到頁面,因此不能創建HttpContext對象;因此,發生404錯誤時不會存在會話。

結帳以下asp.net線程類似的問題和解決方案

http://forums.asp.net/t/1648782.aspx/1

相關問題