Создание Cookie ASP.NET и MVC
У меня довольно простая проблема - я хочу создать cookie на клиенте, который создается сервером.
Я нашел много страниц, которые описывают, как его использовать, но я всегда придерживался одной и той же точки.
У меня есть DBController, который вызывается, когда есть запрос к БД.
Конструктор 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)
Это что-то вроде основного сообщения об ошибке - что за базовая вещь я забыл?
Ответы
Ответ 1
Проблема в том, что вы не можете добавить ответ к конструктору контроллера. Объект Response не был создан, поэтому он получает нулевую ссылку, попробуйте добавить метод для добавления файла cookie и вызвать его в методе действия. Вот так:
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());
Ответ 2
Используйте 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();
}
Ответ 3
Вместо конструктора можно использовать метод Initialize()
контроллера.
В функции инициализации доступен объект Request
. Я подозреваю, что такое же действие можно предпринять с объектом Response
.