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

.NET Core中使用JS发起Fetch请求时Session丢失的解决办法

解决.NET Core控制器中Session值丢失的问题

我之前碰到过一模一样的情况——用fetch调用后端接口时Session值拿不到,返回null。核心原因其实是fetch默认不会携带Cookie,而ASP.NET Core的Session是依赖Cookie来标识会话的,所以后端根本识别不出你之前的会话,自然拿不到之前存的instanceId。下面分几个步骤来解决:

1. 先确认后端Session配置是否正确

首先得确保你的.NET Core项目已经正确配置了Session中间件,而且中间件的顺序不能错——这很容易踩坑!

在Program.cs里,先添加Session服务:

builder.Services.AddSession(options =>
{
    options.IdleTimeout = TimeSpan.FromMinutes(30); // 根据你的需求设置会话超时时间
    options.Cookie.HttpOnly = true;
    options.Cookie.IsEssential = true; // 标记Cookie为必需,确保在用户未同意非必要Cookie时也能使用
});

然后在中间件管道里,必须把UseSession()放在UseRouting()之后、UseAuthorization()之前:

app.UseRouting();
app.UseSession(); // 这个顺序不能乱!
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
});

2. 前端fetch请求必须携带凭据

fetch默认的credentials参数是omit,也就是不发送任何Cookie。你需要把它改成same-origin(同域请求时用)或者include(跨域请求时用),这样浏览器才会把当前域名的Cookie发送给后端。

修改你的fetch代码:

fetch('/你的控制器名/GetEmails', {
    method: 'GET',
    credentials: 'same-origin' // 同域用这个,跨域请改成 'include'
})
.then(response => response.json())
.then(data => {
    // 处理返回的数据
})
.catch(err => console.error('请求出错:', err));

3. 跨域场景额外配置CORS

如果你的前端和后端是跨域的(域名/端口不同),除了前端设置credentials: 'include',后端还必须在CORS策略里允许凭据:

在Program.cs里配置CORS:

builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowFrontend",
        policy => policy.WithOrigins("https://你的前端域名.com") // 替换成实际的前端域名
                        .AllowAnyHeader()
                        .AllowAnyMethod()
                        .AllowCredentials()); // 这个必须加,否则跨域带Cookie无效
});

然后在中间件里启用这个CORS策略:

app.UseCors("AllowFrontend");

4. 最后检查细节

  • 确认你设置instanceId到Session时的键名和获取时完全一致——Session的键是区分大小写的,别把instanceId写成InstanceId了!
  • 确保设置Session的请求和当前的GetEmails请求是同一个会话:比如设置Session的请求也必须携带Cookie,否则会生成新的Session ID,后续请求自然拿不到之前的值。

按照上面的步骤调整后,你应该就能正常获取到Session里的instanceId了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:23:49