我想将我的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. / p>
在我的网络服务中,我有以下方法,然后返回当前登录用户的列表,工作正常。
[WebMethod(EnableSession = true)]
public List<Users> getLoggedInUsername()
{
return (List<Users>)Application["loggedUsers"];
}
答案 0 :(得分:2)
问题是,当您的第一个用户输入时,您在使用loggedUser密钥的应用程序中没有任何值。在投射之前检查NULL应该是常见的做法。
List<User> user = null;
if(HttpContext.Current.Application["loggedUsers"] == null)
{
user = new List<User>();
}
else
{
user = (List<User>)HttpContext.Current.Application["loggedUsers"];
}