Create Cookie ASP.NET & MVC

本文关键字:amp MVC NET Cookie ASP Create | 更新日期: 2023-09-27 18:06:07

我有一个很简单的问题。我想在客户端创建一个cookie,这是由服务器创建的。我找到了很多描述如何使用它的页面,但我总是停留在同一点上。

我有一个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);

这是一种基本的错误信息。我忘记了什么基本的东西?

Create Cookie ASP.NET & MVC

问题是你不能在控制器的构造函数中添加响应。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());

使用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();
}

使用

Response.Cookies["StudentCookies"].Value = "hallo";

您可以使用控制器的Initialize()方法而不是构造函数。在初始化函数中,Request对象是可用的。我怀疑可以对Response对象采取相同的操作。