Cookie不会保留在MVC中

5 debugging asp.net-mvc

我遇到一个问题,我设置的cookie在调用RedirectToAction()后直接丢失.幕后发生的事情是否使当前请求无效并创建一个新的cookie,导致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");

}
Run Code Online (Sandbox Code Playgroud)

更新

我使用默认模板创建了一个新的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();
    }
Run Code Online (Sandbox Code Playgroud)

jao*_*jao 5

原因

Response.Cookies["temp"].Expires = DateTime.UtcNow;
Run Code Online (Sandbox Code Playgroud)

是不行的是它设置过去的过期cookie(至少对我而言).

当我将其更改为时,它可以工作

Response.Cookies["temp"].Expires = DateTime.UtcNow.AddDays(3);
Run Code Online (Sandbox Code Playgroud)

将cookie expires属性设置为过去将删除cookie.

这段代码适合我:

    public ActionResult Index() {
        HttpCookie cookie = Request.Cookies["temp"];
        if (cookie == null) {
            ViewData["Message"] = "Cookie Not Found";
            Response.Cookies["temp"].Value = "This is a cookie: Welcome to ASP.NET MVC!";
            Response.Cookies["temp"].Expires = DateTime.UtcNow.AddDays(3);
        } else {
            return RedirectToAction("Something");
        }
        return View();
    }

    public ActionResult Something() {
        HttpCookie cookie = Request.Cookies["temp"];
        ViewData["Message"] = cookie.Value;
        return View();
    }
Run Code Online (Sandbox Code Playgroud)