在ASP.NET Core 2.1中使用Cookie

11

我有一个简单的ASP.NET Core 2.1应用程序,它应该设置并读取cookie。

每当我尝试读取cookie时,它都返回null。 在浏览器的检查工具中进一步查找后,我无法找到它。

我想出了这个小实现,以查看是否可以解决问题,但它没有起作用..

 public async Task<IActionResult> Contact(Contato contato)
 {
    await email.SendAsync(contato);

    var option = new CookieOptions();
    option.Expires = DateTime.Now.AddMinutes(10);
    Response.Cookies.Append("EmailEnviado", "true", option);
    var boh = Request.Cookies["EmailEnviado"];

    return RedirectToAction("Contact");
 }

变量boh在调试器中检查时为null,尽管它是在前一行中写入的。


2
你正在将cookie添加到Response.Cookies集合中,但接着又尝试从Request.Cookies中读取。它们是两个不同的集合。 - Brad
2
@Martijn Pieters,这不是链接问题的重复,而是关于cookie而不是会话的问题。 - Tratcher
@Tratcher:那里的答案已经被复制到这个问题并被标记为接受,所以这个问题的提问者认为那个答案解决了他们的问题。如果你想投票重新开放,那就去吧,这不是我的专业领域,我只是按照提问者的指示行事。 - Martijn Pieters
就我所知,我真的怀疑那个问题的答案是否真正解决了这个问题,而这个问题的剩余答案似乎已经找到了问题的关键。通过将Cookie添加到Response.Cookies中,它不会自动出现在Request.Cookies中,除非在两者之间完成http请求并启动另一个http请求。 - rdans
1个回答

23

第一次设置cookie后,您将无法立即读取它。一旦响应创建了cookie,您将能够读取它。请考虑以下内容:

public async Task<IActionResult> OnPostCreateAsync()
{

    var option = new CookieOptions();
    option.Expires = DateTime.Now.AddMinutes(10);
    Response.Cookies.Append("Emailoption", "true", option);
    return RedirectToPage();
}

然后在Get方法中,您可以读取Cookie:

public void OnGet()
{
    var boh = Request.Cookies["Emailoption"];
}

2
这是正确的答案,cookie只会在响应发送到下一个页面后才会出现在请求中。 - Pieter van Kampen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接