我想定义一个类" SessionContext"追踪每位客人的具体行动。该课程的定义如下:
public class SessionContext
{
public string Name { get; set; }
}
在我的控制器中,我有一个基本控制器,每个控制器都继承它。代码如下:
public class BaseController : Controller
{
private static Dictionary<string, SessionContext> _sessionDic
= new Dictionary<string, SessionContext>();
public static Dictionary<string, SessionContext> SessionDic
{
get { return _sessionDic; }
set { _sessionDic = value; }
}
}
public class HomeController : BaseController
{
public ActionResult Index()
{
return View();
}
public ActionResult Test()
{
System.Threading.Thread.Sleep(30000);
return View();
}
}
在我的Global.asax中,我添加了两个事件:
protected void Session_Start(object sender, EventArgs e)
{
Dictionary<string, SessionContext> sessionDic = BaseController.SessionDic;
string sessionId = Session.SessionID;
if (!sessionDic.Keys.Contains(sessionId.Trim()))
{
sessionDic.Add(sessionId, new SessionContext());
}
}
protected void Session_OnEnd(object sender, EventArgs e)
{
Dictionary<string, SessionContext> sessionDic = BaseController.SessionDic;
string sessionId = Session.SessionID;
if (sessionDic.Keys.Contains(sessionId))
{
sessionDic.Remove(sessionId);
}
}
那是我的全部代码。我遇到的问题是: 当我在浏览器中打开一个标签并访问Home / Test时,它会按照我的意图等待30秒。 但在30年代,我无法访问其他行动(例如/ Home / Index)。我无法弄明白,有人能告诉我为什么会出现这种情况吗?