我有一个非常简单的问题 - 我想在客户端创建一个由服务器创建的cookie。 我发现很多pages描述了,如何使用它 - 但我总是坚持到同一点。
我有一个DBController,当有对DB的请求时会调用它。
DBController的构造函数是这样的:
public class DBController : Controller
{
public DBController()
{
HttpCookie StudentCookies = new HttpCookie("StudentCookies");
StudentCookies.Value = "hallo";
StudentCookies.Expires = DateTime.Now.AddHours(1);
Response.Cookies.Add(StudentCookies);
Response.Flush();
}
[... more code ...]
}
我在
处得到错误“对象引用未设置为对象的实例”StudentCookies.Expire = DateTime.Now.AddHours(1)
这是一种基本的错误信息 - 那么我忘记了什么样的基本信息?
答案 0 :(得分:18)
问题是你无法在控制器的构造函数中添加响应。尚未创建Response对象,因此它获取了一个空引用,尝试添加一个方法来添加cookie并在action方法中调用它。像这样:
private HttpCookie CreateStudentCookie()
{
HttpCookie StudentCookies = new HttpCookie("StudentCookies");
StudentCookies.Value = "hallo";
StudentCookies.Expires = DateTime.Now.AddHours(1);
return StudentCookies;
}
//some action method
Response.Cookies.Add(CreateStudentCookie());
答案 1 :(得分:5)
使用Response.SetCookie(),因为Response.Cookie.Add()可以添加多个cookie,而SetCookie()将更新现有的cookie。 所以你的问题可以解决。
public DBController()
{
HttpCookie StudentCookies = new HttpCookie("StudentCookies");
StudentCookies.Value = "hallo";
StudentCookies.Expires = DateTime.Now.AddHours(1);
Response.SetCookie(StudentCookies);
Response.Flush();
}

答案 2 :(得分:0)
您可以使用控制器的Initialize()
方法而不是构造函数。
在initialize函数中,Request
对象可用。我怀疑可以对Response
对象采取相同的操作。
答案 3 :(得分:0)
使用
Response.Cookies["StudentCookies"].Value = "hallo";
更新现有的cookie。