我试图在ASHX文件中设置会话变量。我稍微阅读了一下,并且做到了这一点:
我收到一条错误消息,指出' System.Web.HttpContext.Current.Session'一片空白。就像我说的那样,我已经做了一些阅读,看起来好像这应该有效,但出于某种原因,我无法让它为我工作。
我使用System.Web.SessionState添加了使用;在我的处理程序的顶部,但似乎没有做任何有用的事情。 Session变量(HttpContext.Current.Session [" saml_session_id"])被设置为,但似乎没有持续。当我到达aspx文件并从我的即时窗口调用HttpContext.Current.Session [" saml_session_id"]时,只返回NULL。
我已将此作为指导(How to access Session in .ashx file?),但显然遗漏了一些内容。
有人可以告诉我吗?我将继续研究,如果我解决这个问题,将发布解决方案。
请参阅下面的代码。
在我的.aspx文件中 - 我声明了我的会话变量:
HttpContext.Current.Session["saml_session_id"] = string.Empty;
然后在同一个文件中我发布到ashx文件:
var response = Post("http://" + Request.ServerVariables["HTTP_HOST"].ToString() + "/API/Login.ashx", new NameValueCollection() {
{"Username",Username},
{"Password",Password}
});
然后在我的ashx文件中,我有以下内容(这是一个精简版):
using System.Web.SessionState;
//Some validation happens and a string called session_id gets generated.
context.Session["saml_session_id"] = session_id;
//while I'm in the ashx file, context.Session["saml_session_id"] persists.
处理程序中的请求处理完毕后,ASPX文件中的下一个代码是:
if (Response.Status.ToString() == "200 OK") {
Context.Response.Redirect("../Play.aspx?SessionId=" + HttpContext.Current.Session["saml_session_id"].ToString());
}
但是HttpContext.Current.Session [" saml_session_id"]。ToString()现在再次变为空白。基本上看起来处理程序和Web表单没有通信或者会话没有被共享。我已经检查过以确保名称空间是相同的。我还应该检查一下吗?
答案 0 :(得分:4)
确保处理程序继承自System.Web.SessionState.IRequiresSessionState
,就像您提供的链接一样。如果你已经这样做了,那么你应该声明你做了并发布了你的代码。
如果导入命名空间,则不需要HttpContext.Current
部分。
public class ImageHandler : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
string Name = "";
if (context.Session["filename"] != null)
Name = context.Session["filename"].ToString();
}
}
答案 1 :(得分:0)
您需要做的就是导入
IRequiresSessionState
然后添加您的数据:
context.Session.Add("User", "Your Object");
答案 2 :(得分:-1)
这个问题是一个新手的错误,因为我从表格中得到回复但是没有找到正确的地方。结果是以字节为单位,ASHX文件中的会话ID就在那里。