创建Cookie ASP.NET& MVC

时间:2016-09-08 11:55:11

标签: c# asp.net asp.net-mvc cookies

我有一个非常简单的问题 - 我想在客户端创建一个由服务器创建的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)

这是一种基本的错误信息 - 那么我忘记了什么样的基本信息?

4 个答案:

答案 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。