繁体   English   中英

asp.net应用程序状态中的泛型集合

[英]Generic collection in asp.net application state

我想将我的asp.net应用程序中的登录用户存储到一个集合中,并将此集合存储在应用程序状态。 我有一个登录页面和Default.aspx页面加载事件我有以下代码: -

    protected void Page_Load(object sender, EventArgs e)
    {
        users = (List<Users>)HttpContext.Current.Application["loggedUsers"];

        if (User.Identity.IsAuthenticated == false)
        {
            Server.Transfer("Login.aspx");
        }

        if (User.Identity.Name != "")
        {
            users.Add(new Users { userName = User.Identity.Name.ToString() });

            HttpContext.Current.Application["loggedUsers"] = users;
        }
    }

但是,在运行应用程序时,在登录后,在我将向列表中添加新对象的代码上抛出未设置为对象实例的Object引用的异常。 如果我评论以下行:

users = (List<Users>)HttpContext.Current.Application["loggedUsers"];

应用程序将相应地运行,但如果让我们说有两个用户,USER A和USER B,以及USER A登录,则会将其添加到列表中,但是一旦USER B记录它将覆盖USER A.

在我的web服务中,我有以下方法,然后将返回当前记录的用户列表,它工作正常。

    [WebMethod(EnableSession = true)]
    public List<Users> getLoggedInUsername()
    {
        return (List<Users>)Application["loggedUsers"];
    }

问题是,当您的第一个用户进入时,您在使用loggedUser密钥的应用程序中没有任何价值。 在投射之前检查NULL应该是常见的做法。

      List<User> user = null;
      if(HttpContext.Current.Application["loggedUsers"] == null)
      {
         user = new List<User>();
      }
      else
      {
         user = (List<User>)HttpContext.Current.Application["loggedUsers"]; 
      }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM