首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

ASP.NET IHttpModule 中 EndRequest 事件訪問 Session 拋異常的解決方案

     編輯:程式設計綜合問答

異常信息

System.Web.HttpException: 只有在配置文件或 Page 指令中將 enableSessionState 設置為 true 時,才能使用會話狀態。請確保在 <system.web><httpModules> 節中包含 SessionStateModule。

根本原因

在 EndRequest 階段,ASP.NET 已經完成了請求處理並釋放了 Session 狀態模塊,此時 HttpContext.Current.Session 為 null 或已不可用。直接訪問會拋出上述異常。

解決方案

  1. 避免在 EndRequest 讀寫 Session:將 Session 相關邏輯前置到 AcquireRequestState、PreRequestHandlerExecute 或頁面生命周期中。
  2. 若必須在 EndRequest 使用:在 web.config 確認 <modules> 包含 SessionStateModule,並在模塊 Init 方法中掛鉤 PostAcquireRequestState 而非 EndRequest。
  3. 只讀取 Session 數據:可在 BeginRequest 或 AuthenticateRequest 階段將所需 Session 值複製到 HttpContext.Items,後續階段從 Items 讀取。

配置檢查

<system.web>
  <httpModules>
    <add name="Session" type="System.Web.SessionState.SessionStateModule" />
    <add name="MyModule" type="MyNamespace.MyModule" />
  </httpModules>
</system.web>

確保自定義模塊在 SessionStateModule 之後註冊,以便 Session 已初始化。

參考資源

ASP.NET IHttpModule Session 異常詳細分析

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved