You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 6跨域Cookie未保存:API与Razor Pages配置排查

问题分析与修复方案

你的跨域Cookie未保存问题源于几处关键配置缺失,以下是具体问题点和修复方案:

1. 缺失Cookie的Domain配置

你的API(https://localhost:7136)和Razor Pages(https://localhost:7230)属于同一根域名但不同端口,浏览器会将它们视为不同源。默认情况下,API设置的Cookie Domain为localhost:7136,Razor Pages所在的localhost:7230无法读取该Cookie。

修复:在API的CookieOptions中添加Domain配置:

var cookieOptions = new CookieOptions
{
    Expires = DateTimeOffset.UtcNow.AddHours(8),
    HttpOnly = true,
    Secure = true,
    SameSite = SameSiteMode.None,
    Domain = "localhost" // 适配同一根域名下的不同端口站点
};

Response.Cookies.Append("AccessToken", accessToken, cookieOptions);

2. Razor Pages发起请求时未携带Credentials

浏览器跨域请求默认不会携带Cookie,也不会保存响应的Set-Cookie,必须明确允许携带凭据:

  • 后端HttpClient调用:配置HttpClient自动处理Cookie
// Program.cs 中配置HttpClient
builder.Services.AddHttpClient("ApiClient", client =>
{
    client.BaseAddress = new Uri("https://localhost:7136/");
})
.ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler
{
    UseCookies = true,
    CookieContainer = new CookieContainer()
});
  • 前端AJAX请求:设置credentials: 'include'
fetch('https://localhost:7136/api/xxx', {
  method: 'POST',
  credentials: 'include'
});

3. 中间件顺序验证

确保ASP.NET Core中间件顺序正确,UseCors需在UseRouting之后、UseAuthorization之前,UseCookiePolicy在UseCors之后:

// Program.cs 中间件顺序示例
app.UseHttpsRedirection();
app.UseRouting();
app.UseCors("AllowRxEcom");
app.UseCookiePolicy();
app.UseAuthorization();
app.MapRazorPages();

4. 浏览器隐私设置检查

部分浏览器(如Chrome)默认阻止第三方Cookie,可临时用无痕模式测试(无痕模式默认允许第三方Cookie),或在浏览器设置中临时开启允许所有第三方Cookie(仅开发环境使用)。

验证步骤

  1. 修复API的Cookie Domain配置
  2. 确保请求携带Credentials
  3. 调整中间件顺序(若需)
  4. 打开浏览器开发者工具的Application面板,查看Cookies列表是否存在AccessToken

内容的提问来源于stack exchange,提问作者thampister

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 08:47:13