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-静态属性正是我所需要的,因为你是对的-用户列表将始终是相同的(它是所有用户!)如果你愿意,发布一个答案,我会接受