none
Llevar a una clase los procedimientos de lectura y ecritura de cookies RRS feed

  • Pregunta

  • Buenas, hago una consulta, estoy trabajando con un código para leer, escribit y borrar cookies:

    protected string ReadCookie(string name)
            {
                HttpCookie authCookie = Request.Cookies[name];
    
                return (authCookie == null) ? string.Empty : authCookie.Value;
            }
    
    
    
    
    
            protected void DeleteCookie(string name)
            {
                HttpCookie last = Request.Cookies[name];
                if (last != null)
                {
                    last.Expires = DateTime.Now.AddDays(-1);
                    Response.Cookies.Add(last);
                }
            }
    
    
    
    
            protected void WriteCookie(string name, string value, DateTime expiration)
            {
                DeleteCookie(name);
    
                var newCookie = new HttpCookie(name);
                newCookie.Value = value;
                newCookie.Expires = expiration;
                Response.Cookies.Add(newCookie);
            }

    Esto necesito usarlo en varias páginas web y quisiera hacerlo en una clase para no repetir código.

    Lo pongo en una clase publica pero me salta un error de que "Request" no existe en el contexto actual.

    Y se me ocurrio agregarle a la definicion de la clase que herede de System.Web.Ui.Page:

    public class Cookies : System.Web.UI.Page
        {
    
            public string ReadCookie(string name)
            {
                ...
            }
    
            public void DeleteCookie(string name)
            {
                ...
            }
    
            public void WriteCookie(string name, string value, DateTime expiration)
            {
                ...
            }
    
        }

    En este caso compila bien pero no funciona, me sale un error: "Solicitud no disponible en este contexto"

    Hay alguna solucion para el manejo de cookies desde una clase?

    Gracias!



    • Editado programinca jueves, 21 de enero de 2021 11:49
    jueves, 21 de enero de 2021 11:48

Respuestas

  • Desde tu clase puedes acceder al Request así:

    System.Web.HttpContext.Current.Request

    y similarmente ...HttpContext.Current.Response.

    La razón por la que no funciona si heredas de Page es que dicha clase lee el Request desde el contexto de Http, que se supone que es asignado automáticamente por la infraestructura al invocar la página desde el navegador, pero esto no ocurre si la llamas tú como tu propia clase. Se soslaya accediendo al contexto "Current" como te he indicado arriba. Ojo, dará un error si lo llamas desde un sitio al que no hayas llegado desde una página web (por ejemplo, el global.asax) porque el HttpContext.Current devuelve null en este caso.



    jueves, 21 de enero de 2021 12:57

Todas las respuestas

  • Desde tu clase puedes acceder al Request así:

    System.Web.HttpContext.Current.Request

    y similarmente ...HttpContext.Current.Response.

    La razón por la que no funciona si heredas de Page es que dicha clase lee el Request desde el contexto de Http, que se supone que es asignado automáticamente por la infraestructura al invocar la página desde el navegador, pero esto no ocurre si la llamas tú como tu propia clase. Se soslaya accediendo al contexto "Current" como te he indicado arriba. Ojo, dará un error si lo llamas desde un sitio al que no hayas llegado desde una página web (por ejemplo, el global.asax) porque el HttpContext.Current devuelve null en este caso.



    jueves, 21 de enero de 2021 12:57
  • Hola,

    Gracias por confirmar que se ha encontrado una solución a la consulta realizada.

    Gracias por usar los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    jueves, 21 de enero de 2021 15:06
    Moderador
  • Eso es! muchas gracias
    jueves, 21 de enero de 2021 18:03