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.
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
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP