HTTP is een stateless protocol. Elk verzoek is onafhankelijk, en de uitvoering en resultaten ervan zijn niet direct gerelateerd aan het vorige verzoek en het daaropvolgende verzoek, en het zal niet direct worden beïnvloed door het antwoord op het vorige verzoek, noch het antwoord op het volgende verzoek.
In feite ondersteunt ons systeem gebruikers vaak om dezelfde gegevens (status) te delen tussen de clientbrowser en de server, meerdere verzoeken, zoals de inloggegevens van de gebruiker. Daarom biedt ASP.NET veel variabelen om de staat te beheren: applicatiestatus, sessiestatus, weergavestatus, enzovoort.
Het HttpContext-object is alleen voor één enkel HTTP-verzoek.De eigenschappen van deze klasse omvatten ook Request-objecten, Response-objecten, Session-objecten, enzovoort. Dit is de Items-collectie van de HttpContext-klasse, die een hashtabelobject bevat in de vorm van key-value.
Laten we eerst kijken naar het doel van HttpContext.Current.Items, dat alleen werkt op één gebruikersverzoek (HttpContext.Current.Items geldig voor één HTTPRequest). Wanneer dit verzoek is voltooid, gaat de itemverzameling verloren wanneer de serverinformatie wordt teruggestuurd naar de browser. Het Session-object is bedoeld voor de sessie van de gebruiker, dat wil zeggen, het handelt op meerdere gebruikersverzoeken, en de informatie gaat verloren nadat de sessie is verlopen.
Aangezien HttpContext.Current.Items zo'n korte levenscyclus heeft, onder welke omstandigheden kan het worden gebruikt? Hier wordt opgemerkt dat HttpContext.Current.Items kan worden gebruikt bij het delen van gegevens tussen HttpModule en HTTPHandler, omdat elk gebruikersverzoek via de HTTP-runtime-pijplijn HttpModule, HTTPHandler, gaat. Wanneer je de IHttpMoudle-methode implementeert om informatie via HttpMoudle aan het gebruikersverzoek door te geven. Je kunt HttpContext.Current.Items gebruiken om data over te dragen in verschillende verzoekpagina's en verschillende HttpModules, maar zodra het verzoek eindigt en de data is geplaatst, gaat de data in deze collectie vanzelf verloren. Zoals te zien is in de volgende figuur:
Daarnaast kunnen we, wanneer de serverpagina springt (Server.Execute/Server.Transfer), HttpContext.Current.Items gebruiken om data tussen de twee formulieren door te geven.
Natuurlijk, als je Server.Transfer verandert naar Response.Redirect, kun je de data niet ophalen in HttpContext.Current.Items op de nieuwe pagina omdat het een andere HTTP-aanvraag is. System.NullReferenceException: De objectreferentie is niet ingesteld op de instantie van het object.
|