【发布时间】:2022-03-03 18:59:26
【问题描述】:
由于某种原因,我的 cookie 没有被设置。我尝试了几件事,但是当我检查 Chrome 或 Edge 中的 Cookie 存储时,我的 cookie 似乎从未设置过。
在我的 Startup.cs 中,我有以下内容:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
// Also tried SameSiteMode.None
options.MinimumSameSitePolicy = SameSiteMode.Lax;
});
...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILogger<Startup> logger)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseCors(options => options
.WithOrigins("http://localhost:3000")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
app.UseCookiePolicy(); // Breakpoint hits this code
}
...
}
然后在我的控制器操作中,我尝试设置 cookie:
public IActionResult Test()
{
// Also tried different SameSiteMode options, non seem to work.
// If I set a breakpoint, then it hits. So code gets executed.
HttpContext.Response.Cookies.Append("X-Blaat", "test", new CookieOptions { Expires =
DateTime.UtcNow.AddMonths(1), SameSite = SameSiteMode.Lax, IsEssential = true});
return Ok();
}
此 Web API 在 https://localhost:44365 上运行。端点继续存在:https://locahost:44365/api/test。
我通过在http://localhost:3000 上运行的 React 应用程序调用此端点。
但由于某种原因,我的 cookie 永远不会被设置。尽管我可以通过代码进行调试。
有人知道为什么我的 cookie 永远不会被写入浏览器吗?
更新
当我通过 Swagger 调用同一个端点时,cookie 会被设置。
由于某种原因,当我通过我的 React 应用程序调用我的 Web API 时,它们没有出现。
我怀疑问题在于它运行在与我的 Web API 不同的端口上。有什么办法可以解决这个问题吗?
【问题讨论】:
-
参考这个答案:stackoverflow.com/a/52461278/633098 简单来说,如果
options.CheckConsentNeeded设置为true,那么只有必要的cookies会发送到浏览器。要覆盖它,您可以将IsEssential标志设置为true将您的cookie 标记为必不可少。 -
@silkfire 这就是我设置的,你可以在我的代码示例中看到。
-
好吧抱歉以某种方式错过了那一点。您的浏览器是否报告任何有关阻止这些 cookie 的信息?响应是什么样的?
标签: c# asp.net-web-api cookies .net-6.0