在web应用程序列表中添加对象

本文关键字:添加 对象 列表 web 应用程序 | 更新日期: 2023-09-27 17:52:46

我一直在尝试创建一个简单的web应用程序,注册用户并使用列表保存他们的详细信息。问题是,在对RegisterUser函数的第一次调用中成功添加用户后,在第二次调用中列表再次为空。它是否与函数是HTTP方法这一事实有关?

代码:

public class WS : System.Web.Services.WebService
{
    List<User> users = new List<User>();
    [WebMethod]
    [ScriptMethod(UseHttpGet = true)]
    public void registerUser()
    {
        try
        {
            string s = HttpContext.Current.Request.Form[0].ToString();
            User tempUser = new User();
            tempUser = JsonConvert.DeserializeObject<User>(s);
            users.Add(tempUser);
        }
        catch(Exception e)
        {
            HttpContext.Current.Response.Write(e.Message);
        }
    }
}

在web应用程序列表中添加对象

public class WS : System.Web.Services.WebService
{
    [WebMethod(EnableSession = true)]
    [ScriptMethod(UseHttpGet = true)]
    public void registerUser()
    {
        try
        {
            if(Session["users"] == null)
                Session["users"] = new List<User>();
            List<User> users = (List<User>)Session["users"];
            string s = HttpContext.Current.Request.Form[0].ToString();
            User tempUser = new User();
            tempUser = JsonConvert.DeserializeObject<User>(s);
            users.Add(tempUser);
            Session["users"] = users;
        }
        catch(Exception e)
        {
            HttpContext.Current.Response.Write(e.Message);
        }
    }
}

users字段将在每次创建WS类的新实例时实例化。要跨调用持久化数据,需要将其设置为静态。但是,每次web服务器服务重新启动时,您都会丢失数据,因此您可能应该考虑持久化到数据库或其他持久化数据存储。

代码:

private static List<User> users = new List<User>(); // could probably be readonly too

如果这是一个安全解决方案,而不仅仅是一个数据收集练习,我会进一步建议你重新考虑你正在做的事情。net有一个可用的成员提供程序子系统,你应该研究一下。