ashx中應用HttpContext.Current.Session ,呈現未將對象引用設置到實例上

在ASHX一般處理程序文件中如需調用Session必須繼承System.Web.SessionState.IRequiresSessionState接口,才能實現Session讀寫!

System.Web.SessionState的接口介紹:

  1. IReadOnlySessionState 指定目標 HTTP 處理程序只需要具有對會話狀態值的讀訪問權限。這是一個標記接口,沒有任何方法。
  2. 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處理程序只需要具有對話訪問狀態值的讀訪問權限。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章