aaarianme
aaarianme

Reputation: 282

How to access session in class library .Net Core 5

is there a way to access HttpContext.session in a class library? (im using .Net Core 5) I have the configuration all set up and also using microsoft.AspNetCore.Http but im still unable to access the session variables. If there is no way to do that whats the best way to perform actions that require the current User's ID/Identification?

Upvotes: 1

Views: 5505

Answers (1)

Michael Wang
Michael Wang

Reputation: 4022

As @King King answered, you could inject the IHttpContextAccessor into the class.

Step 1 Add Session service

    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 =>
        ...
    }

Step 2 Access Session in custom class

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");
        ...
    }
}

Step 3 access session via custom class

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

Upvotes: 8

Related Questions