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

ASHX 實現 IRequiresSessionState 導致 Request.InputStream 為空:SessionID URL 嵌入重定向導致流丟失

     編輯:程式設計綜合問答

現象:`context.Request.InputStream` 讀取 JSON 數據,實現 `IRequiresSessionState` 後流變空。

原因

  • ASP.NET **Cookieless Session** 模式 (或自動檢測) 將 `SessionID` 嵌入 URL:`/api.ashx/(S(xxxx))/action`。
  • 首次請求無 Cookie 時,模組 **302 重定向** 到帶 SessionID 的 URL。
  • 重定向為 **GET 請求**,原始 POST Body (`InputStream`) **丟失**,導致後續處理讀到空流。

解決方案

  1. 禁用 Cookieless Session (推薦) — `web.config`:
    <sessionState cookieless="UseCookies" />  // 強制用 Cookie
    
  2. 客戶端預先獲取 Cookie**:先請求一個頁面建立 Session Cookie,再 POST 到 ASHX。
  3. 改用 MVC/WebAPI**:`[SessionState(SessionStateBehavior.ReadOnly)]` 精細控制,避免 ASHX 歷史包袱。

驗證

F12 Network 面板觀察:第一次 POST → 302 Found → Location 帶 `(S(xxx))` → 瀏覽器自動 GET → InputStream 為空。

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