HTTP ist ein zustandsloses Protokoll. Jede Anfrage ist unabhängig, und ihre Ausführung sowie Ergebnisse stehen nicht in direktem Zusammenhang mit der vorherigen Anfrage und der nachfolgenden Anfrage, und sie werden weder direkt von der Antwort auf die vorherige Anfrage noch direkt auf die Antwort auf die nachfolgende Anfrage beeinflusst.
Tatsächlich unterstützt unser System oft Nutzer, dieselben Daten (Zustand) zwischen dem Client-Browser und dem Server mit mehreren Anfragen zu teilen, wie zum Beispiel die Login-Kontoinformationen des Benutzers. Daher stellt ASP.NET viele Variablen zur Verwaltung des Zustands bereit: Anwendungszustand, Sitzungszustand, Ansichtszustand usw.
Das Objekt HttpContext ist nur für eine einzelne HTTP-Anfrage vorgesehen.Zu den Eigenschaften dieser Klasse gehören außerdem Request-Objekte, Response-Objekte, Session-Objekte usw. Dies ist die Items-Sammlung der HttpContext-Klasse, die ein Hash-Tabellenobjekt in Form eines Key-Value enthält.
Schauen wir uns zunächst den Zweck von HttpContext.Current.Items an, das nur auf einer einzigen Benutzeranforderung funktioniert (HttpContext.Current.Items gültig für eine einzelne HTTPRequest). Wenn diese Anfrage abgeschlossen ist, geht die Item-Sammlung verloren, wenn die Serverinformationen an den Browser zurückgesendet werden. Das Session-Objekt ist für die Sitzung des Benutzers, das heißt, es handelt auf mehrere Benutzeranfragen, und die Informationen gehen nach Ablauf der Sitzung verloren.
Da HttpContext.Current.Items einen so kurzen Lebenszyklus hat, unter welchen Umständen kann es verwendet werden? Es wird hier erwähnt, dass HttpContext.Current.Items beim Datenaustausch zwischen HttpModule und HTTPHandler verwendet werden kann, da jede Benutzeranfrage über die HTTP-Laufzeit-Pipeline HttpModule, HTTPHandler, läuft. Wenn Sie die IHttpMoudle-Methode implementieren, um Informationen über HttpMoudle an die Benutzeranfrage weiterzugeben. Sie können HttpContext.Current.Items verwenden, um Daten auf verschiedenen Anfrageseiten und in verschiedenen HttpModules zu übertragen, aber sobald die Anfrage endet und die Daten veröffentlicht sind, gehen die Daten in dieser Sammlung von selbst verloren. Wie in der folgenden Abbildung dargestellt:
Außerdem können wir beim Sprung der Serverseite (Server.Execute/Server.Transfer) HttpContext.Current.Items verwenden, um Daten zwischen den beiden Formularen zu übertragen.
Offensichtlich kannst du, wenn du Server.Transfer auf Response.Redirect änderst, die Daten in HttpContext.Current.Items auf der neuen Seite nicht abrufen, weil es sich um eine andere HTTP-Anfrage handelt. System.NullReferenceException: Die Objektreferenz ist nicht auf die Instanz des Objekts gesetzt.
|