Vooraan geschreven
Wat betreft de relevante inhoud van IHttpModule, werd ik ook tijdens het interview gevraagd, en ik had vaag het gevoel dat deze interface een Init-methode heeft, die een reeks gebeurtenissen kan registreren met de Init-methode in de implementatieklas. Thuis dit weekend is er eigenlijk niets te doen, zelfs niet als het is om de gaten in deze kennis te controleren en op te vullen.
IHttpModule werkt
Vrienden die bekend zijn met asp.net levenscyclus moeten weten dat de uitvoering van HttpModule plaatsvindt vóór HttpHandler, en na het uitvoeren van een reeks gebeurtenissen van HttpModule, vervolgens het uitvoeren van HttpHandler en vervolgens enkele gebeurtenissen van HttpModule. Voor details kunt u het volgende levenscyclusdiagram raadplegen.
De HttpHandler is de plek om het HTTP-verzoek af te handelen, de HttpModule is de "enige manier" voor een HTTP-verzoek, dus je kunt wat benodigde informatie bovenop de HTTP-verzoekinformatie toevoegen voordat dit HTTP-verzoek wordt doorgegeven aan het echte verzoekverwerkingscentrum (HttpHandler), of extra werk doen aan de onderschepte HTTP-verzoekinformatie. Of in sommige gevallen simpelweg HTTP-verzoeken beëindigen die aan bepaalde voorwaarden voldoen, wat als filter kan fungeren.
Een HTTP-verzoek wordt op een gegeven moment (ResolveRequestCache-event) tijdens de levering van de HttpModule-container doorgegeven aan de HttpHandler-container. Na dit event maakt de HttpModule-container een ingress-instantie van de HttpHandler aan, maar in plaats van de controle over het HTTP-verzoek op te geven, blijft het de AcquireRequestState- en PreRequestHandlerExcute-evenementen afvuren. Na het PreRequestHandlerExcute-evenement geeft het HttpModule-venster tijdelijk controle over aan de HttpHandler-container voor echte HTTP-verzoekverwerking.
Binnen de HttpHandler-container wordt de ProcessRequest-methode uitgevoerd om HTTP-verzoeken af te handelen. Nadat de container-HttpHandler het volledige HTTP-verzoek heeft verwerkt, geeft het de controle terug aan de HttpModule, die de verwerkte HTTP-verzoekinformatiestroom laag voor laag doorgeeft totdat deze wordt teruggegeven aan de client.
Een voorbeeld
Projectstructuur
MyHttpModule-code
Registreer een aangepaste HttpModule in web.config
Blader door pagina Default.aspx
Wat is dan de volgorde van uitvoering van een reeks gebeurtenissen in de levenscyclus?
Bekijk de resultaten
Gebruik HttpModule om het Http-verzoek te beëindigen
resultaat
samenvatting
Hier introduceren we de belangrijkste interface in de asp.net levenscyclus, IHttpModule, die kan worden omschreven als een gebeurtenisinterface, omdat in de Init-methode in de implementatieklasse verschillende gebeurtenissen in de levenscyclus kunnen worden geregistreerd en diverse logica in het event kunnen worden gedefinieerd.
|