現象:`context.Request.InputStream` 讀取 JSON 數據,實現 `IRequiresSessionState` 後流變空。
原因
- ASP.NET **Cookieless Session** 模式 (或自動檢測) 將 `SessionID` 嵌入 URL:`/api.ashx/(S(xxxx))/action`。
- 首次請求無 Cookie 時,模組 **302 重定向** 到帶 SessionID 的 URL。
- 重定向為 **GET 請求**,原始 POST Body (`InputStream`) **丟失**,導致後續處理讀到空流。
解決方案
- 禁用 Cookieless Session (推薦) — `web.config`:
<sessionState cookieless="UseCookies" /> // 強制用 Cookie
- 客戶端預先獲取 Cookie**:先請求一個頁面建立 Session Cookie,再 POST 到 ASHX。
- 改用 MVC/WebAPI**:`[SessionState(SessionStateBehavior.ReadOnly)]` 精細控制,避免 ASHX 歷史包袱。
驗證
F12 Network 面板觀察:第一次 POST → 302 Found → Location 帶 `(S(xxx))` → 瀏覽器自動 GET → InputStream 為空。