我在ASP.NET中创建了HttpHandler类,并配置了一个网站来处理任何带有* .test路径的请求。
public class GameHandler : IHttpHandler, IRequiresSessionState
{
public bool IsReusable
{
get
{
return false;
}
}
public void ProcessRequest (HttpContext context)
{
if (context.Request.ContentType == "application/json; charset=utf-8")
{
...
switch (parameters ["type"])
{
case "Setup":
result = Setup (context);
break;
case "DoStep":
result = DoStep (context, parameters);
break;
}
...
}
else
context.Response.Write (@"
<html>
<head>
</head>
<body>
<!-- some HTML -->
</body>
</html>"); // this is returned on first request
}
在Setup方法中,我有这样的代码:
context.Session ["Game"] = new Game ();
然而,在DoStep方法中,context.Session.Count = 0和context.Session [“Game”]为NULL。 在客户端,我使用jquery来调用这些函数。这样的电话看起来像这样:
$.ajax({
url: "/test.test",
type: "POST",
data: "{'type':'Setup'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {...}
});
$.ajax({
url: "/test.test",
type: "POST",
data: "{'type':'DoStep','row':'" + row + "','column':'" + column + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {...}
});
我怀疑问题是ASP.NET不知道从javascript发送的这些请求属于同一个会话,这就是Session值丢失的原因。我认为我需要发回一些cookie信息或其他东西以便下一个请求被识别,但事实是我不知道。
非常感谢任何帮助。
答案 0 :(得分:1)
如果有人遇到这个问题,我想指出这是因为我在ProcessRequest方法中使用了一些文件操作。
var doc = XDocument.Load (@"c:\XO_Game_Website\bin\test.xml");
if (context.Session ["something"] == null)
{
context.Session.Add("something", "something");
doc.Root.Element ("xxx").Value = "null";
}
else
{
doc.Root.Element ("xxx").Value = "not null";
}
doc.Save("path");
我删除了doc.Save(“path”);从方法来看,一切都很好。尽管如此,我无法弄清楚为什么文件操作代码会重置会话值。
快乐的编码。