首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET HttpHandler 存取 Session 的關鍵:實作 IRequiresSessionState

     編輯:ASP.NET 基礎

核心規則

預設 IHttpHandler 不支援 Session。若需在 ProcessRequest 中讀寫 context.Session,類別**必須**實作 IRequiresSessionState (讀寫) 或 IReadOnlySessionState (唯讀) 介面。這兩個介面為標記介面,無任何方法需實作。

完整程式碼範例

using System;
using System.Web;
using System.Web.SessionState;

public class HandleDataRequest : IHttpHandler, IRequiresSessionState
{
    public bool IsReusable => true;

    public void ProcessRequest(HttpContext context)
    {
        // 現在可以正常存取 Session
        string name = context.Session["UserName"] as string;
        context.Response.ContentType = "text/plain";
        context.Response.Write($"Hello, {name ?? "Guest"}");
    }
}

Web.config 註冊 (IIS 7+ 整合模式)

<system.webServer>
  <handlers>
    <add name="HandleDataRequest"
         verb="*"
         path="api/data.ashx"
         type="YourNamespace.HandleDataRequest, YourAssembly"
         preCondition="integratedMode" />
  </handlers>
</system.webServer>

常見錯誤

  • 忘記實作 IRequiresSessionState,導致 context.Session 永遠為 null。
  • 在 web.config <httpHandlers> (傳統模式) 註冊但 IIS 為整合模式,導致處理常式不生效。

補充:ASHX 捷徑

若使用 .ashx 檔案,Visual Studio 產生的程式碼後置類別已自動實作 IRequiresSessionState,只需在標記加入 EnableSession="true":

<%@ WebHandler Language="C#" Class="MyHandler" EnableSession="true" %>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved