【发布时间】:2012-04-20 01:17:36
【问题描述】:
我遇到的问题是,我正在设置的 cookie 在调用 RedirectToAction() 后直接丢失。幕后发生的事情是否使当前请求无效并创建一个新请求,导致 cookie 在持久化到磁盘之前丢失?
我了解,如果您希望数据在重定向后可用,您需要使用 TempData,但对于 cookie 是否也一样?如果是这样,必须将 cookie 值存储在 TempData 中,然后再写入 cookie,这不是很丑吗?
更新:
我刚刚意识到cookie在请求结束时丢失了,如果我调用RedirectToAction()也没关系。所以现在的问题是为什么 cookie 不会持续存在两个请求? (我更新了下面的代码以显示我现在在做什么)
public ActionResult DoSomething()
{
Response.Cookies["SomeCookie"].Value = "Jarified";
Response.Cookies["SomeCookie"].Expires = DateTime.UtcNow.AddDays(3);
return View("SomeView");
}
更新
我使用默认模板创建了一个新的 MVC 项目。我修改了 HomeController/Index 操作以具有以下代码。我第一次点击视图“未找到 Cookie”时按预期打印。但是,以后每次都会打印相同的消息。如果我删除设置到期日期的行,那么一切正常。我想这里真正的问题是为什么使 cookie 持久化会导致浏览器将其丢弃?有什么技巧可以让 cookie 在 MVC 中持久化?
public ActionResult Index()
{
HttpCookie cookie = Request.Cookies["temp"];
if (cookie == null)
{
ViewData["Message"] = "Cookie Not Found";
Response.Cookies["temp"].Value = "Welcome to ASP.NET MVC!";
Response.Cookies["temp"].Expires = DateTime.UtcNow;
}
else
{
ViewData["Message"] = cookie.Value;
}
return View();
}
【问题讨论】:
标签: asp.net-mvc debugging