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

时间:2018-02-28 00:15:53

标签: c# asp.net-mvc session request

我需要在用户使用该应用程序时始终更新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

我可以看到,当我导航到某个页面时会调用OnActionExecutingInitialize方法,并且当InitialiseUsers会话变量时调用SPUsers方法是null

问题是,该会话变量总是 null

为什么?

为什么价值未在InitailiseUsers中更新?或者是否在达到其他两种方法时清除了价值?

感谢任何指导。

1 个答案:

答案 0 :(得分:1)

看起来每个人都会得到相同的用户列表会话变量。也许单例(应用程序上下文或静态属性)可以更好地实现可伸缩性。