variable una sesion saber recuperar obtener net mvc existe asp c# asp.net methods static session-variables

c# - sesion - ¿Cómo puedo obtener el valor de una variable de sesión dentro de un método estático?



variables de session en c# net (4)

Estoy usando métodos de página ASP.NET con jQuery ... ¿Cómo obtengo el valor de una variable de sesión dentro de un método estático en C #?

protected void Page_Load(object sender, EventArgs e) { Session["UserName"] = "Pandiya"; } [WebMethod] public static string GetName() { string s = Session["UserName"].ToString(); return s; }

Cuando compilo esto obtengo el error:

Se requiere una referencia de objeto para el campo, método o propiedad no estático ''System.Web.UI.Page.Session.get''`


Prueba esto:

HttpContext.Current.Session["UserName"].ToString();


Puede acceder a la Session actual a través de HttpContext.Current , una propiedad estática a través de la cual puede recuperar la instancia de HttpContext que se aplica a la solicitud web actual. Este es un patrón común en el Código de aplicación estático y en los métodos de página estáticos.

string s = (string)HttpContext.Current.Session["UserName"];

La misma técnica se utiliza para acceder a la Session desde los métodos web ASMX decorados con [WebMethod(EnableSession = true)] porque, aunque dichos métodos no son estáticos, no heredan de la Page y, por lo tanto, no tienen acceso directo a una propiedad Session .

El código estático puede acceder al caché de la aplicación de la misma manera:

string var1 = (string)HttpContext.Current.Cache["Var1"];

Si el código estático está dentro de otro proyecto, debemos hacer referencia a System.Web.dll . Sin embargo, en este caso, generalmente es mejor evitar dicha dependencia porque si se llama al código desde fuera de un contexto ASP.NET HttpContext.Current será null , por razones obvias. En cambio, podemos requerir un HttpSessionState como argumento (aún necesitaremos la referencia a System.Web por supuesto):

public static class SomeLibraryClass { public static string SomeLibraryFunction(HttpSessionState session) { ... } }

Llamada:

[WebMethod] public static string GetName() { return SomeLibraryClass.SomeLibraryFunction(HttpContext.Current.Session); }


Si no ha cambiado el hilo, puede usar HttpContext.Current.Session , como lo indica jwwishart.

HttpContext.Current devuelve el contexto asociado con el hilo. Obviamente, esto significa que no puede usarlo si ha iniciado un nuevo hilo, por ejemplo. Es posible que también deba considerar la agilidad de subprocesos: las solicitudes de ASP.NET no siempre se ejecutan en el mismo subproceso para la totalidad de la solicitud. Creo que el contexto se propaga adecuadamente, pero es algo a tener en cuenta.


HttpContext.Current.Session["..."]

HttpContext.Current te proporciona el contexto actual ... bueno, Http; desde el cual puede acceder: Sesión, Solicitud, Respuesta, etc.