簡體   English   中英

Cookies 未在 .NET6 WebApi 應用程序中設置

[英]Cookies are not set in .NET6 WebApi application

由於某種原因,我的 cookies 沒有被設置。 我嘗試了幾件事,但是當我檢查 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
    }

    ...
}

然后在我的 Controller 操作中,我嘗試設置 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 調用同一個端點時,cookies 確實設置好了。

由於某種原因,當我通過我的 React 應用程序調用我的 Web API 時,它們沒有出現。

我懷疑問題在於它運行在與我的 Web API 不同的端口上。 有什么我可以嘗試解決這個問題的嗎?

我假設你已經弄清楚了。 但問題是您試圖將 cookie 從 https 設置為 http。 如果您在 program.cs 中刪除該行app.UseHttpsRedirection(); 並且在您的客戶端中使用 api 的 http 版本,應該可以)

在向服務器發出登錄請求時,確保您的 React 應用程序具有credentials: 'include'

根據MDN

除非使用設置為includecredentials選項調用fetch() ,否則 fetch fetch()

  • 不會在跨域請求中發送 cookies
  • 不會設置在跨域響應中發回的任何 cookies

還要確保始終在 CorsPolicyBuilder 上設置CorsPolicyBuilder .AllowCredentials() ,而不僅僅是在開發模式下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM