首页 > 解决方案 > 如何访问类库.Net Core 5中的会话

问题描述

有没有办法HttpContext.session在类库中访问?(我正在使用.Net Core 5)我已经完成了configuration所有设置并且还在使用microsoft.AspNetCore.Http,但我仍然无法访问会话变量。如果没有办法做到这一点,那么执行需要当前用户 ID/身份的操作的最佳方式是什么?

标签: asp.net-core.net-coreasp.net-core-mvc

解决方案


正如@King King 回答的那样,您可以将其IHttpContextAccessor注入课堂。

步骤 1 添加会话服务

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();

        services.AddSession();
        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); 

    }
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

    {
        ...
        app.UseAuthorization();

        app.UseSession();

        app.UseEndpoints(endpoints =>
        ...
    }

步骤 2 自定义类中的访问会话

public class SessionTest
{
    private readonly IHttpContextAccessor _httpContextAccessor;
    private ISession _session => _httpContextAccessor.HttpContext.Session;

    public SessionTest(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public void setSession()
    {
        _session.SetString("Test", "Hello World!");
    }

    public void getSession()
    {
        var message = _session.GetString("Test");
        ...
    }
}

步骤 3 通过自定义类访问会话

public class HomeController : Controller
{
    private readonly ILogger<HomeController> _logger;
    private readonly IHttpContextAccessor _httpContextAccessor;
    private readonly ISession _session;

    public HomeController(IHttpContextAccessor httpContextAccessor,ILogger<HomeController> logger)
    {
        _logger = logger;
        _httpContextAccessor = httpContextAccessor;
        _session = _httpContextAccessor.HttpContext.Session;
    }

    public IActionResult Index()
    {
        SessionTest session = new SessionTest(_httpContextAccessor);
        session.setSession();
        session.getSession();
        return View();
    }
}

推荐阅读