【问题标题】:Cookies are not set in .NET6 WebApi application.NET 6 Web Api 应用程序中未设置 Cookie
【发布时间】: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


【解决方案1】:

我假设你已经弄清楚了。 但问题是您试图将 cookie 从 https 设置为 http。 如果您在 program.cs 中删除 app.UseHttpsRedirection(); 行 并且在您的客户端使用 api 的 http 版本,应该可以工作)

【讨论】:

    猜你喜欢
    • 2015-03-16
    • 2015-03-14
    • 2018-02-24
    • 2023-02-03
    • 2013-01-27
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多