C# 会话变量在调用控制器之前被清除

C# 会话变量在调用控制器之前被清除,c#,asp.net-mvc,session,request,C#,Asp.net Mvc,Session,Request,我需要在用户使用应用程序时始终更新会话变量 我尝试了以下方法: public class MyController : Controller { protected override void OnActionExecuting(ActionExecutingContext filterContext) { var a = filterContext.HttpContext.Session["SPUsers"]; if (filterContext

我需要在用户使用应用程序时始终更新会话变量

我尝试了以下方法:

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
方法被调用,并且当
SPUsers
会话变量为
null
时,
InitialiseUsers
方法被调用

问题是,会话变量始终为空

为什么呢

为什么在
InitailiseUsers
中不更新该值?或者是在到达其他两种方法之前清除了该值


感谢您的指导。

看起来每个人最终都会得到相同的用户列表。也许单例(应用程序上下文或静态属性)更适合于可伸缩性。

您可能会在本文中找到一个提示来回答您的问题:使用会话意味着一个有状态的web服务器。这是不可伸缩的。通常,状态是我会保存在数据库中的东西。@spender我正在从SharePoint列表中检索数据,但CSOM速度非常慢,所以我想在会话中缓存该数据。看起来每个人都会使用相同的会话变量用户列表。也许单例(应用程序上下文或静态属性)更适合于可伸缩性。除此之外,你确定spClient.GetAllUsers()没有返回null吗?@Obie谢谢你Obie-静态属性正是我所需要的,因为你是对的-用户列表将始终是相同的(它是所有用户!)如果你愿意,发布一个答案,我会接受