将对象添加到 Web 应用程序中的列表
Add objects to list in web application
我一直在尝试创建一个简单的 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);
}
}
}
每次创建 WS
class 的新实例时,都会实例化 users
字段。要跨调用保留数据,您需要将其设置为 static。但是,每次 Web 服务器服务重新启动时您都会丢失数据,因此您可能应该考虑持久化到数据库或其他持久性数据存储。
代码:
private static List<User> users = new List<User>(); // could probably be readonly too
如果这是一个安全解决方案而不仅仅是数据收集练习,我会进一步建议重新考虑您正在做的事情。 .NET 有一个可用的成员提供程序子系统,您应该研究一下。
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);
}
}
}
我一直在尝试创建一个简单的 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);
}
}
}
每次创建 WS
class 的新实例时,都会实例化 users
字段。要跨调用保留数据,您需要将其设置为 static。但是,每次 Web 服务器服务重新启动时您都会丢失数据,因此您可能应该考虑持久化到数据库或其他持久性数据存储。
代码:
private static List<User> users = new List<User>(); // could probably be readonly too
如果这是一个安全解决方案而不仅仅是数据收集练习,我会进一步建议重新考虑您正在做的事情。 .NET 有一个可用的成员提供程序子系统,您应该研究一下。
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);
}
}
}