【问题标题】:How to access session in class library .Net Core 5如何访问类库.Net Core 5中的会话
【发布时间】:2021-01-26 14:35:15
【问题描述】:

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

【问题讨论】:

  • 您可能想要所谓的IHttpContextAccessor - 这是在服务/类中访问HttpContext 的推荐方式。

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


【解决方案1】:

正如@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();
    }
}

【讨论】:

  • 如果在 EF Core 中使用类库,这将如何工作?我已经实现了这个,但是 IHttpContextAccessor 没有通过
猜你喜欢
  • 1970-01-01
  • 2012-08-09
  • 2018-06-30
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多