Reputation: 814
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
Reputation: 2409
Use
Response.Cookies["StudentCookies"].Value = "hallo";
to update existing cookie.
Upvotes: 2
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
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
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 Response
object.
Upvotes: 1