TransWikia.com

Acceder al HttpContext.Session en ASP.NET Core

Stack Overflow en español Asked by DUVAN on December 28, 2021

Hola estoy creando una app en asp.net core 2.1 y necesito obtener una variable de sesión en una clase no Controller pero al agregar: HttpContext.Session.GetString("SessionVar") me saca el error:

“Se requiere una referencia de objeto para el campo,método o propiedad
‘HttpContext.Session’ no estáticos”

he intentado de varias formas pero no se me da.

One Answer

En principio, debes tener configurados los servicios para usar sesiones en ASP.NET Core en el archivo Startup.cs:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc(); 
        // AÑADIR LOS SERVICIOS DE SESIÓN.
        services.AddDistributedMemoryCache();
        services.AddSession(options => {
            options.IdleTimeout = TimeSpan.FromMinutes(20); // Tiempo de expiración   
        });
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseStaticFiles();

        // AÑADIR LA SESIÓN.
        // DEBE IR SIEMPRE ANTES DE app.UseMvc
        app.UseSession();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }

Luego, para acceder a la sesión desde una clase NO controladora, debes hacerlo mediante inyección de dependencias en el constructor de la clase, a través de la interfaz IHttpContextAccessor:

public class MiClase
{
    private readonly IHttpContextAccessor _httpContextAccessor;

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

    public void PruebaSet()
    {
        _httpContextAccessor.HttpContext.Session.SetString("SessionVar", "Prueba!");
    }

    public void PruebaGet()
    {
        var message = _httpContextAccessor.HttpContext.Session.GetString("SessionVar");
    }
}

Answered by Rafael Acosta on December 28, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP