Quelle est la différence entre ces deux HttpContext.Actuel.Session et Session - asp.net 4,0

Quelle est la différence entre ces 2 codes?

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

asp.net 4,0 et C# 4,0

19
demandé sur Yeldar Kurmangaliyev 2011-10-31 18:10:21

7 réponses

Ils effectivement la même chose, en ce qu'ils accéderont aux mêmes données de Session.

la raison pour laquelle vous pouvez appeler Session dans votre code-derrière est parce que ASP.Net les pages par défaut étendent le System.Web.UI.Page type. Cela a un Session propriété publique. Si vous regardez le code dans le Réflecteur, vous pouvez voir qu'il appelle simplement HttpContext.Current.Session lui-même (par ses propres Context propriété).

Dans d'autres classes, vous n'aurez pas accès à la propriété, mais vous pouvez utiliser HttpContext.Current.Session pour accéder aux données de session à la place, tant que vous êtes en cours d'exécution dans le contexte d'une application web.

24
répondu Kasaku 2012-07-30 13:57:15

dans un scénario de stantard, CE sont les mêmes. La différence est que la première déclaration fonctionnera également dans des contextes statiques tels qu'une méthode Web.

8
répondu Variant 2011-10-31 14:13:37

Il y a une différence. La seconde (Session) est une propriété de nombreux objets .NET, comme Page par exemple. Donc, vous ne pouvez pas avoir accès, dans le constructeur de ces objets par exemple. Cependant, la première (HttpContext.Current.Session), est toujours prêt et à votre disposition (bien sûr, après le chargement de la session dans le Pipeline de traitement de la demande).

5
répondu Saeed Neamati 2011-10-31 14:15:37

Il n'y a pas de différence. Page.La Session renvoie le HttpContext.Current.Session

cela étant dit, j'ai écrit .dll agissent comme des extensions pour des applications web. Ils. les dll n'ont pas le concept de Session. Dans ces cas, je peux accéder à la session courante de l'application web qui utilise my .dll en faisant référence à HttpContext.Current.Session

3
répondu James Hill 2011-10-31 14:13:19

Il n'y a pas de différence. Ils sont la même chose; la deuxième forme est plus court :)

2
répondu Icarus 2011-10-31 14:12:30

il n'y a pas de différence de comportement. Si vous utilisez du code dans votre classe personnalisée où HttpContext n'est pas directement disponible et que vous voulez accéder à la valeur de session que nous utilisons la première ligne de code, alors que la deuxième ligne est utilisée lors de l'accès à la page ou dans les classes de contrôle.

2
répondu Nps 2011-10-31 14:13:19

un Autre assez approfondie de la réponse de Nicolas Carey https://stackoverflow.com/a/6021261/365017

Pas tous HttpHandlers fournit l'état de session. Pour ce faire, le HttpHandler doit implémenter [l'un ou les deux?] les interfaces marqueur IRequiresSessionState ou IReadOnlySessionState.

HttpContext.Actuel.Session retourne simplement null s'il n'y a pas de session disponible.

l'implémentation par HttpApplication de la propriété Session lance une HttpException avec L'état Session du message n'est pas disponible dans ce contexte. plutôt que de retourner une référence nulle."

1
répondu Steve G. 2017-05-23 12:02:41