.NET Core中在普通类中使用Session的问题求助
解决.NET Core普通实体类中无法使用Session的SetString/GetString方法的问题
这个问题我之前也碰到过,核心原因有两个:一是普通类不像控制器那样自带HttpContext的访问权限,二是SetString/GetString是Microsoft.AspNetCore.Http命名空间下的扩展方法,没引用的话也看不到。下面给你一步步的解决方案:
1. 确保项目已正确配置Session
首先得确认你的项目已经启用了Session服务,在Program.cs(.NET 6+)里要做这两步:
// 注册Session服务 builder.Services.AddSession(); // 在中间件管道中启用Session,注意顺序要在UseRouting之后,UseAuthorization之前 app.UseRouting(); app.UseSession(); // 放在这里 app.UseAuthorization();
2. 注册IHttpContextAccessor服务
普通类没办法直接拿到HttpContext,需要通过IHttpContextAccessor来获取,所以先在Program.cs里注册这个服务:
builder.Services.AddHttpContextAccessor();
3. 在普通实体类中注入并使用
接下来在你的普通类里,通过构造函数注入IHttpContextAccessor,然后就可以访问Session的扩展方法了,记得要引用Microsoft.AspNetCore.Http命名空间:
using Microsoft.AspNetCore.Http; public class MyCustomEntity { private readonly IHttpContextAccessor _httpContextAccessor; // 通过构造函数注入IHttpContextAccessor public MyCustomEntity(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } // 设置Session数据 public void SetUserSession() { // 使用?.避免HttpContext为null的情况(比如非HTTP请求场景) _httpContextAccessor.HttpContext?.Session.SetString("User", "True"); } // 获取Session数据 public string GetUserSession() { return _httpContextAccessor.HttpContext?.Session.GetString("User"); } }
额外提醒
- 一定要引用
Microsoft.AspNetCore.Http命名空间,否则SetString和GetString这两个扩展方法不会显示出来。 - 使用
?.操作符是因为在某些非HTTP请求的上下文(比如后台任务)中,HttpContext可能为null,这样可以避免空引用异常。
内容的提问来源于stack exchange,提问作者abhishek
相关产品推荐
相关产品推荐

