在 ASP.NET Core 2.1 中使用 cookie [重复]

Posted

技术标签:

【中文标题】在 ASP.NET Core 2.1 中使用 cookie [重复]【英文标题】:Using cookies in ASP.NET Core 2.1 [duplicate] 【发布时间】:2019-02-10 23:13:45 【问题描述】:

我有一个简单的 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,当通过调试器检查时为空,即使它是在前一行中写入的。

【问题讨论】:

您正在将 cookie 添加到 Response.Cookies 集合,但随后尝试从 Request.Cookies 中读取。它们是两个独立的集合。 @Martijn Pieters,这不是链接问题的重复,这是关于 cookie 而不是会话。 @Tratcher:那里的答案已被复制到这个问题并标记为已接受,所以这个问题的 OP 认为那个答案回答了他们的问题。如果您想投票重新开放,请继续,这不是我的专业领域,我按照 OP 的指示进行。 fwiw 我会严重怀疑其他问题的答案是否会真正解决这个问题,而关于这个问题的剩余答案似乎已经一针见血了。通过向 Response.Cookies 添加一个 cookie,如果没有完成 http 请求并在两者之间发起另一个 http 请求,它就不会自动出现在 Request.Cookies 中 【参考方案1】:

第一次设置后,您将无法立即读取 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"];

【讨论】:

这是正确的答案,cookie只有在响应传递到下一页后才会出现在请求中

以上是关于在 ASP.NET Core 2.1 中使用 cookie [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 asp.net core 2.1 中使用自定义消息设置状态代码?

ASP.NET Core 2.1 在视图中使用 HttpContext

在 ASP.NET Core 2.1 中使用 cookie [重复]

如何在 ASP.NET Core 2.1 中使用自动完成输入引发模式

学习 ASP.NET Core 2.1:集成测试中使用 WebApplicationFactory

ASP.Net Core 2.1 注册自定义 ClaimsPrincipal