在ASHX一般處理程序文件中如需調用Session必須繼承System.Web.SessionState.IRequiresSessionState接口,才能實現Session讀寫!
System.Web.SessionState的接口介紹:
- IReadOnlySessionState 指定目標 HTTP 處理程序只需要具有對會話狀態值的讀訪問權限。這是一個標記接口,沒有任何方法。
- IRequiresSessionState 指定目標 HTTP 處理程序需要對會話狀態值具有讀寫訪問權。這是一個標記接口,沒有任何方法。
自定義 HTTP 處理程序,從IHttpHandler繼承,在寫System.Web.HttpContext.Current.Session["Name"]的時候沒有問題,但想將這個Session寫到某個變量時,發現Session的值爲NULL;MSDN中的解決方法爲:“在自定義 HTTP 處理程序中實現 IRequiresSessionState 接口,以確定處理程序是否需要對會話狀態值具有讀寫訪問權”,在自定義的類上加上該接口後,Session值獲取正常。
解決辦法:
1.引用using System.Web.SessionState;
2.在aspx類實現IReadOnlySessionState接口。如:public class {ClassName}: IHttpHandler, IReadOnlySessionState{…}
原因:
“IReadOnlySessionState”,指定目標HTTP處理懲罰法度只須要具有對話接見狀況值的讀接見權限。
實際上是ashx文件起首是實現了IHttpHandler接口。但要接見page中的session狀況值時,是兩個應用範疇。
微軟默認狀況下沒有接見權限,所以ashx文件接見不了HttpContext.Current.Session,故呈現未將對象設置到實例上。
只須要在實現IReadOnlySessionState接口即可。
概括:1.using System.Web.SessionState;
2.public class {ClassName}: IHttpHandler, IReadOnlySessionState
“IReadOnlySessionState”,指定目標HTTP處理程序只需要具有對話訪問狀態值的讀訪問權限。