2012-03-10 80 views
5

我有以下简单的处理器(除去一些代码vissibilty缘故,但是下面仍然失败)通用处理程序中的会话?

<%@ 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")与失败“未设置为一个对象的实例对象引用”。我不明白这是为什么?

+0

什么对象是'null'?它是'context'还是'context.Session'? – svick 2012-03-10 16:52:32

+2

对不起 - 找到了我自己的问题的答案。 应该添加'IRequiresSessionState'(如'公共类DownloadHandler:IHttpHandler,IRequiresSessionState') – brother 2012-03-10 16:54:28

回答

11

这是因为对于http处理程序为了访问​​Session您需要明确实现IRequiresSessionState接口。

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

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

+0

我面临同样的问题,我在我的处理程序代码中使用iRequiresSessionState,但仍然无法访问会话值。会话密钥仍然是0.谁能告诉我这个? – 2013-02-25 10:53:12