asp.net应用程序状态下的通用集合

本文关键字:集合 net 应用 程序状态 asp | 更新日期: 2023-09-27 18:10:52

我想将我的asp.net应用程序中的登录用户存储到一个集合中,并将此集合存储在应用程序状态中。我有一个登录页面和默认。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;
        }
    }

然而,在运行应用程序时,在登录后,对象引用未设置为对象实例的异常正在代码中抛出,我将新对象添加到列表中。如果我注释以下行:

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

应用程序将相应地运行,但是如果假设我们有两个用户,USER A和USER B,并且USER A登录,他被添加到列表中,但是一旦USER B登录,它将覆盖USER A。

在我的webservice中,我有以下方法,它将返回当前登录用户的列表,这很好。

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

asp.net应用程序状态下的通用集合

问题是,当您的第一个用户输入时,您在具有loggedUser键的应用程序中没有值。在强制转换NULL之前检查NULL应该是一个常见的做法。

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