我正在使用ASHX處理程序,我希望處理程序檢查Session!= null。System.NullReferenceException當檢查是否!= null
if (context.Session["Username"] != null)
,我得到這個錯誤指向這一行:
System.NullReferenceException:未設置爲一個對象的實例對象引用。
什麼問題?
我正在使用ASHX處理程序,我希望處理程序檢查Session!= null。System.NullReferenceException當檢查是否!= null
if (context.Session["Username"] != null)
,我得到這個錯誤指向這一行:
System.NullReferenceException:未設置爲一個對象的實例對象引用。
什麼問題?
if (context.Session["Username"] != null)
請問您處理函數中實現IRequiresSessionState
?否則會話可能不可用。
從MSDN:
指定目標HTTP處理程序 需要讀取和寫入訪問 會話狀態值。這是一個標記 接口並且沒有方法。
是的我會說,檢查是否上下文不爲空。
像這樣使用它。其中一個封裝對象可能已空:
if (context != null)
if (context.Session != null)
if (context.Session["Username"] != null) {
// Do stuff
}
堆疊如上所述的空檢查總是比較安全的,以便您可以精確定位問題的確切來源。看起來像一件苦差事,但收益。 – 2011-04-25 00:54:41
如果Session沒有可用的代碼路徑,那麼這種方法是合理的 - 另一方面,如果期望Session存在並且你的代碼*取決於這個假設是一個很難的假設,那麼**失敗很快**方法就是讓它拋出一個異常,否則很可能你用空檢查掩蓋了這個問題。 – BrokenGlass 2011-04-25 01:37:29
當然嵌套if語句應該用nested else來補充,在那裏它適合處理一個空對象(它不應該是null),並用合適的消息拋出一個適當的異常。 – 2011-04-25 01:43:41
我有一個.ashx文件的類似問題。解決方案是處理程序必須實現IReadOnlySessionState(用於只讀訪問)或IRequiresSessionState(用於讀寫訪問)。例如:
public class myModule: IHttpHandler, IRequiresSessionState { ... }
這些接口不需要任何附加代碼,但是充當框架的標記。
希望這可以幫助。
喬納森
是的 - 原來的評估是錯誤 – BrokenGlass 2011-04-25 00:51:08
哦愚蠢的我, 我應該加上'IReadOnlySessionState' ... 我發現這個鏈接:http://www.hanselman.com/blog/ GettingSessionStateInHttpHandlersASHXFiles.aspx – Danpe 2011-04-25 00:51:18