Comment puis-je obtenir la valeur d'une variable de session à l'intérieur d'une méthode statique?
Je suis en utilisant ASP.NET méthodes de page avec jQuery..... Comment puis-je obtenir la valeur d'une variable de session à l'intérieur d'une méthode statique 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;
}
Quand je compile ce que j'obtiens l'erreur:
Une référence d'objet est requise pour la non-statique champ, une méthode ou une propriété du Système".Web.L'INTERFACE utilisateur.Page.Session.obtenez de l'"
- utilisation HttpContext.Courant comme ceci: HttpContext.Actuel.Session["UserName"].ToString();
Vous devez vous connecter pour publier un commentaire.
HttpContext.Current.Session["..."]
HttpContext.Current
vous obtient le courant ... eh bien, Http Contexte; à partir de laquelle vous pouvez accéder à: Session, Demande, Réponse, etcSession
est une propriété d'occurrence de la classe de Page qui renvoie unHttpSessionState
objet. Lorsque vous écrivez quelque chose commeSession["..."]
, c'est vraimentthis.Session["..."]
. Parce qu'un membre statique n'a pas dethis
objet, vous ne pouvez pas accéder à laSession
de la propriété. Toutefois, vous pouvez accéder à la mêmeHttpSessionState
objet à l'aide du code que hwwishart suggéré.Si vous n'avez pas changé de fil, vous pouvez utiliser
HttpContext.Current.Session
, comme indiqué par jwwishart.HttpContext.Current
retourne le contexte associé au thread. Évidemment, cela signifie que vous ne pouvez pas l'utiliser si vous avez commencé un nouveau fil de discussion, par exemple. Vous peut devez également tenir compte de fil de l'agilité ASP.NET les demandes ne sont pas toujours exécuter sur le même thread pour l'ensemble de la demande. Je croire que le contexte est propagée de façon appropriée, mais c'est quelque chose à garder à l'esprit.Essayez ceci:
Vous pouvez accéder à la
Session
viaHttpContext.Courant
- un statique propriété par le biais de laquelle vous pouvez récupérer leHttpContext
exemple qui s'applique à la demande web actuelle. C'est un modèle courant statique dans le Code de l'Application et des méthodes de page statiques.La même technique est utilisée pour accéder à la
Session
de l'intérieur web ASMX méthodes décorées avec[WebMethod(EnableSession = true)]
car, si de telles méthodes ne sont pas statiques, ils n'héritent pas dePage
et n'ont donc pas d'accès direct à uneSession
propriété.Statique de code peut accéder à la Le Cache De L'Application de la même façon:
Si le code statique est à l'intérieur d'un autre projet, nous avons besoin de faire référence à
System.Web.dll
. Toutefois, dans ce cas, il est généralement possible pour éviter une telle dépendance, parce que si le code est appelé à partir de l'extérieur d'un ASP.NET contexteHttpContext.Current
seranull
, pour des raisons évidentes. Au lieu de cela, nous pouvons exiger unHttpSessionState
comme un argument (nous avons toujours besoin de la référence àSystem.Web
bien sûr):Appel: