【问题标题】:Session in generic handler?通用处理程序中的会话?
【发布时间】:2012-03-11 00:54:05
【问题描述】:

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

<%@ 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;
        }
    }
}

if (context.Session["t1"] != "true") 行因“未将对象引用设置为对象的实例”而失败。我不太明白这是为什么?

【问题讨论】:

  • null 是什么对象?是context 还是context.Session
  • 抱歉 - 找到了我自己问题的答案。应添加IRequiresSessionState(如public class DownloadHandler : IHttpHandler, IRequiresSessionState

标签: c# asp.net session handler


【解决方案1】:

这是因为 http 处理程序要访问 Session,您需要显式实现 IRequiresSessionState 接口。

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

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

【讨论】:

  • 我遇到了同样的问题,我在处理程序代码中使用了 iRequiresSessionState,但我仍然无法访问会话值。会话密钥仍为 0。谁能告诉我这个?
猜你喜欢
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
相关资源
最近更新 更多