Общая коллекция в состоянии приложения asp.net

Я хотел бы сохранить зарегистрированных пользователей в моем приложении 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;
        }
    }

Однако при запуске приложения после входа в систему в коде, где я добавляю новые объекты в список, создается исключение ссылки на объект, не установленное на экземпляр объекта. Если я прокомментирую следующую строку:

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

Приложение будет работать соответственно, однако, если, скажем, у нас есть два пользователя, ПОЛЬЗОВАТЕЛЬ А и ПОЛЬЗОВАТЕЛЬ Б, и ПОЛЬЗОВАТЕЛЬ А входит в систему, он добавляется в список, однако, как только ПОЛЬЗОВАТЕЛЬ Б регистрируется, он перезаписывает ПОЛЬЗОВАТЕЛЯ А.

В моем веб-сервисе у меня есть следующий метод, который затем возвращает список зарегистрированных в настоящее время пользователей, который отлично работает.

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

person krafo    schedule 24.04.2013    source источник
comment
проверьте наличие ключа, прежде чем использовать его. HttpContext.Current.Application[loggedUsers] != null; если он равен нулю, создайте нового пользователя List‹user›, в противном случае приведите его и используйте.   -  person Devesh    schedule 24.04.2013


Ответы (1)


Проблема в том, что при входе вашего первого пользователя у вас нет значения в приложении с ключом loggedUser. Обычной практикой должна быть проверка NULL перед его приведением.

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