yesfabime
yesfabime

Reputation: 814

Create Cookie ASP.NET & MVC

I have a quite simple problem. I want to create a cookie at a Client, that is created by the server. I've found a lot of pages that describe, how to use it - but I always stuck at the same point.

I have a DBController that gets invoked when there is a request to the DB.

The DBController's constructor is like this:

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 ...]

}

I get the Error "Object reference not set to an instance of an object" at:

StudentCookies.Expire = DateTime.Now.AddHours(1);

This is a kind of a basic error message. So what kind of basic thing I've forgot?

Upvotes: 31

Views: 82221

Answers (4)

Bruno De Freitas Barros
Bruno De Freitas Barros

Reputation: 2409

Use

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

to update existing cookie.

Upvotes: 2

Shekhar Patel
Shekhar Patel

Reputation: 671

Use Response.SetCookie(), because Response.Cookie.Add() can add multiple cookies, whereas SetCookie() will update an existing cookie. So I think your problem can be solved.

public DBController()
{
    HttpCookie StudentCookies = new HttpCookie("StudentCookies");
    StudentCookies.Value = "hallo";
    StudentCookies.Expires = DateTime.Now.AddHours(1);
    Response.SetCookie(StudentCookies);
    Response.Flush();
}

Upvotes: 15

James Ralston
James Ralston

Reputation: 1208

The problem is you cannot add to the response in constructor of the controller. The Response object has not been created, so it is getting a null reference, try adding a method for adding the cookie and calling it in the action method. Like so:

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());

Upvotes: 46

Radu
Radu

Reputation: 63

You could use the Initialize() method of the controller instead of the constructor. In the initialize function the Request object is available. I suspect that the same action can be taken with the Responseobject.

Upvotes: 1

Related Questions