我需要在用户使用该应用程序时始终更新Session变量。
我尝试了以下方法:
public class MyController : Controller
{
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var a = filterContext.HttpContext.Session["SPUsers"];
if (filterContext.HttpContext.Session["SPUsers"] != null)
{
new Task(InitialiseUsers).Start();
}
base.OnActionExecuting(filterContext);
}
protected override void Initialize(RequestContext requestContext)
{
var a = requestContext.HttpContext.Session["SPUsers"];
if (requestContext.HttpContext.Session["SPUsers"] == null)
{
new Task(InitialiseUsers).Start();
}
base.Initialize(requestContext);
}
private void InitialiseUsers()
{
var spClient = new SPClient(ConfigurationManager.AppSettings["ADVBaseUrl"]);
Session["SPUsers"] = spClient.GetAllUsers();
}
}
我的所有其他控制器都继承自MyController
。
我可以看到,当我导航到某个页面时会调用OnActionExecuting
和Initialize
方法,并且当InitialiseUsers
会话变量时调用SPUsers
方法是null
。
问题是,该会话变量总是 null
。
为什么?
为什么价值未在InitailiseUsers
中更新?或者是否在达到其他两种方法时清除了价值?
感谢任何指导。
答案 0 :(得分:1)
看起来每个人都会得到相同的用户列表会话变量。也许单例(应用程序上下文或静态属性)可以更好地实现可伸缩性。