我有一个在客户端页面上运行的HttpHandler(跨域,而不是我们的IIS服务器等),当他们点击我们的嵌入式链接时,它会触发我们服务器上的Handler。到目前为止一切正常。
我现在正在尝试使用System.Web.HttpContext.Session对象,但它为null。我认为它是null,因为我们在调用HttpHandler之前没有会话?多次调用处理程序会在每次调用时创建一个新会话?如果是这种情况,MS只是在调用HttpHandler时禁用了Session对象吗?谁能证实这一点?
如果是这种情况,您如何维持呼叫之间的状态?某种基于SQL的数据对象?一个文件?
TIA
答案 0 :(得分:136)
让你的HttpHandler实现 IRequiresSessionState 接口。它将启用会话状态使用。
可以在System.Web.SessionState
命名空间中找到IRequiresSessionState。
答案 1 :(得分:27)
我认为你必须实现空接口IReadOnlySessionState,因此将加载上下文。
编辑添加:
根据Michael Morton的回答,您还可以实施 IRequiresSessionState,这也将为您提供对Session对象的写访问权
答案 2 :(得分:7)
using System;
using System.Web;
using System.Web.SessionState;
public class DownloadHandler : IHttpHandler, IReadOnlySessionState
{
public bool IsReusable { get { return true; } }
public void ProcessRequest(HttpContext context)
{
context.Response.Write(context.Session["kmx"]);
}
}
答案 3 :(得分:-10)
尝试使用当前上下文...
System.Web.HttpContext.Current.Session