HTTP est un protocole sans état. Chaque requête est indépendante, et son exécution ainsi que ses résultats ne sont pas directement liés à la demande précédente et à la requête suivante, et elle ne sera pas directement affectée par la réponse à la demande précédente, ni directement sur la réponse à la demande suivante.
En fait, notre système permet souvent aux utilisateurs de partager les mêmes données (état) entre le navigateur client et le serveur pour plusieurs requêtes, telles que les informations de compte de connexion de l’utilisateur. Ainsi, ASP.NET fournit de nombreuses variables pour gérer l’état : état de l’application, état de la session, état de la vue, etc.
L’objet HttpContext ne concerne qu’une seule requête http.Les propriétés de cette classe incluent également les objets Request, Response, Session objects, etc. Il s’agit de la collection Items de la classe HttpContext, qui contient un objet de table de hachage sous forme de key-value.
Tout d’abord, examinons l’objectif de HttpContext.Current.Items, qui ne fonctionne que sur une seule requête utilisateur (HttpContext.Current.Items valable pour un seul HTTPRequest). Lorsque cette requête est complétée, la collecte d’éléments sera perdue lorsque les informations du serveur seront renvoyées au navigateur. L’objet Session est pour la session de l’utilisateur, c’est-à-dire qu’il agit sur plusieurs requêtes utilisateurs, et l’information est perdue après l’expiration de la session.
Puisque HttpContext.Current.Items a un cycle de vie aussi court, dans quelles circonstances peut-il être utilisé ? Il est noté ici que HttpContext.Current.Items peut être utilisé lors du partage de données entre HttpModule et HTTPHandler, car chaque requête utilisateur passe par le pipeline d’exécution HTTP HttpModule, HTTPHandler. Lorsque vous implémentez la méthode IHttpMoudle pour transmettre des informations à la demande utilisateur via HttpMoudle. Vous pouvez utiliser HttpContext.Current.Items pour transférer des données dans différentes pages de requête et différents HttpModules, mais une fois la requête terminée et les données postées, les données de cette collection seront perdues d’elles-mêmes. Comme le montre la figure suivante :
De plus, lorsque la page serveur saute (Server.Execute/Server.Transfer), nous pouvons utiliser HttpContext.Current.Items pour transmettre des données entre les deux formes.
Évidemment, si vous changez Server.Transfer en Response.Redirect, vous ne pourrez pas obtenir les données dans HttpContext.Current.Items dans la nouvelle page car il s’agit d’une requête Http différente. System.NullReferenceException : La référence objet n’est pas définie sur l’instance de l’objet.
|