Pregunta

Estoy implementando un MembershipProvider personalizado para pasar los detalles de inicio de sesión a un objeto comercial personalizado que usamos en otros lugares de nuestra empresa. Pero una vez que nos hayamos autenticado, me gustaría guardar este objeto comercial inicializado en la sesión para usarlo más adelante en otras páginas. Déjame dar un ejemplo.

public override bool ValidateUser(string username,string password)
{
    try
    {
        // I want to keep this "object" in the Session to be used later on
        CustomBusinessObject object = new CustomBusinessObject(username, password);

        return true;
    }
    catch (CustomBusinessAuthenticationException)
    {
        return false;
    }
}

¿Hay alguna manera de hacer esto? No vi de inmediato una forma de obtener acceso al objeto Session a través de la implementación de este MembershipProvider personalizado.

¿Fue útil?

Solución

Puede acceder a la sesión llamando a System.Web.HttpContext.Current. Simplemente cree una propiedad personalizada en su proveedor de membresía personalizado que verifique si HttpContext.Current es nulo y, de ser así, devuelve un valor nulo; de lo contrario, acceda al valor de la sesión en consecuencia.

public object CustomObject
{
    get
    {
        if(System.Web.HttpContext.Current == null)
        {
            return null;
        }
        return System.Web.HttpContext.Current.Session["CustomObject"];
    }
    set
    {
        if(System.Web.HttpContext.Current != null)
        {
            System.Web.HttpContext.Current.Session["CustomObject"] = value;
        }
    }
}

Otros consejos

Debería poder acceder a System.Web.HttpContext.Current.Session .

Tenga en cuenta que System.Web.HttpContext será null si su proveedor se utiliza alguna vez fuera de la canalización de ASP.Net, y al usarlo dentro de su proveedor, estará acoplando a su proveedor estrechamente a ASP.Net.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top