ASP.NET Core 7中Session数据始终为Null的问题求助
问题诊断与解决方案
你的问题核心是Session中间件的注册顺序错误,导致跨请求时无法读取到Session数据。
问题原因
在ASP.NET Core中,中间件的执行顺序严格遵循注册顺序。你当前的代码里app.UseSession()放在了app.UseAuthorization()之后,这会导致Session的初始化逻辑晚于授权逻辑,Session Cookie无法被正确关联到后续请求,最终跨请求读取Session时返回空值。
修正步骤
1. 调整中间件顺序
修改Program.cs中的中间件注册代码,将app.UseSession()移到app.UseAuthorization()之前:
app.UseRouting(); app.UseSession(); app.UseAuthorization(); app.MapControllers();
注:
UseRouting是路由匹配的基础,如果你的代码里原本没有,需要补充加上。
2. 额外排查点
如果调整顺序后仍有问题,可以检查以下两点:
- User类的序列化兼容性:确保
User类拥有公共无参构造函数,且需要序列化的属性均为public修饰,否则JsonSerializer可能无法完成正确的序列化/反序列化操作。 - 前端请求的Cookie携带:如果是前端页面调用API,需确保请求时携带Session Cookie。比如Axios要设置
withCredentials: true,Fetch要设置credentials: 'include';若为跨域场景,后端还需配置CORS允许携带凭证。
验证
调整完成后重启服务,登录成功后调用welcome接口,即可正常读取Session中存储的User对象。
内容的提问来源于stack exchange,提问作者vantsa
相关产品推荐
相关产品推荐

