none
Se requiere una referencia de objeto para el campo, método o propiedad 'HttpContext.Session' no estáticos RRS feed

  • Pregunta

  • Hola.

    Quiero consumir una Web API.NET CORE que utiliza JWT para autenticar y autorizar usuarios, tengo planeado consumir la API  desde MVC ASP.NET CORE utilizando HTTPClient y para ello guardaré el token generado por la API en una variable de sesion en mi aplicacion MVC y luego para cada request enviare el token en el header.

    en startup.cs en ConfigureServices escribí esta linea de codigo: services.AddSession() y en Configure: app.UseSession

    este es el codigo que consume la API y guarda el token en la variable de session

     public async Task<string> ObtenerJWT(ConsumirLogin datos)
            {           
                var content = JsonConvert.SerializeObject(datos);
                var httpResponse = await _client.PostAsync(BaseUrl, new StringContent(content, Encoding.Default, "application/json"));
    
                if (!httpResponse.IsSuccessStatusCode)
                {
                    throw new Exception("Error");
                }
    
                string stringJWT = await httpResponse.Content.ReadAsStringAsync(); 
                JWT jwt = JsonConvert.DeserializeObject<JWT>(stringJWT);
               
                HttpContext.Session.SetString("token", jwt.Token);
                return jwt.Token;
            }
     

    pero en HttpContext.Session.SetString me marca el error: Se requiere una referencia de objeto para el campo, método o propiedad 'HttpContext.Session' no estáticos.

    pueden ayudarme y decirme cual es el error?


    pabletoreto


    • Editado pabletoreto martes, 8 de octubre de 2019 22:35
    martes, 8 de octubre de 2019 22:34

Todas las respuestas

  • Si no me equivoco, te falta "Current":

    HttpContext.Current.Session....

    • Propuesto como respuesta Pablo RubioModerator miércoles, 9 de octubre de 2019 21:15
    • Votado como útil pabletoreto miércoles, 9 de octubre de 2019 21:34
    miércoles, 9 de octubre de 2019 6:28
    Moderador
  • 'HttpContext' no contiene una definición para 'Current'
    lunes, 19 de abril de 2021 17:46
  • Current solo está en Framework. En Core lo han quitado.

    Pero en su lugar puedes usar la inyección de dependencias (suponiendo que la tengas bien configurada en tu proyecto) para inyectar un IHttpContextAccessor y a través de éste obtener la sesión:

    public class MiClase : ...
    {
        private readonly IHttpContextAccessor _contextAccessor;
    
        public MiClase(IHttpContextAccessor contextAccessor)
        {
            _contextAccessor = contextAccessor;
        }
    
        public void HacerAlgoConSesion()
        {
            var sesion = _contextAccessor.HttpContext.Session;
            //...
        }
    }

    Editado: Ver también esta página de la documentación que trata de este tema.
    lunes, 19 de abril de 2021 19:03
    Moderador