通用处理程序中的会话

bro*_*her 5 c# asp.net session handler

我有以下简单的处理程序(为vissibilty sakes删除了一些代码,但是下面的代码仍然失败)

<%@ WebHandler Language="C#" Class="DownloadHandler" %>
using System;
using System.Web;

public class DownloadHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        if (context.Session["t1"] != "true")
        {

        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

该行if (context.Session["t1"] != "true")失败,"对象引用未设置为对象的实例".我不明白为什么会这样?

Vla*_*aev 11

那是因为对于http处理程序,为了访问Session你需要显式实现IRequiresSessionState接口.

请记住,如果这样做,会话对象将存在隐式锁定,并且您将无法同时处理同一会话状态中的多个处理程序.

只有一个IReadOnlySessionState接口用于只读会话状态访问.