Napisano spredaj
Glede relevantne vsebine IHttpModule so me med intervjujem vprašali in nekako sem začutil, da ima ta vmesnik metodo Init, ki lahko zabeleži niz dogodkov z metodo Init v razredu implementacije. Doma ta vikend ni prav nič za početi, tudi če gre za preverjanje in zapolnjevanje vrzeli v tem znanju.
IHttpModule dela
Prijatelji, ki poznajo asp.net življenjski cikel, bi morali vedeti, da se izvajanje HttpModule izvaja pred HttpHandlerjem, po izvedbi serije dogodkov HttpModule, nato izvajanju HttpHandlerja in nato izvajanju nekaterih dogodkov HttpModule. Za podrobnosti si oglejte naslednji diagram življenjskega cikla.
HttpHandler je prostor za obravnavo HTTP zahtevka, HttpModule je "edini način" za HTTP zahtevek, tako da lahko dodate nekaj potrebnih informacij na HTTP zahteve, preden se ta HTTP zahtevek posreduje v pravi center za obdelavo zahtevkov (HttpHandler), ali pa opravite dodatno delo na prestreženih HTTP zahtevah. Ali pa v nekaterih primerih preprosto zaključite HTTP zahteve, ki izpolnjujejo določene pogoje, kar lahko deluje kot filter.
HTTP zahtevek bo nekje med dostavo kontejnerja HttpModule posredovan v vsebnik HttpHandler (dogodek ResolveRequestCache). Po tem dogodku kontejner HttpModule ustvari vhodno instanco HttpHandlerja, vendar namesto da bi izgubil nadzor nad HTTP zahtevo, še naprej sproži dogodke AcquireRequestState in PreRequestHandlerExcute. Po dogodku PreRequestHandlerExcute okno HttpModule začasno preda nadzor vsebniku HttpHandler za dejansko obdelavo HTTP zahtevkov.
Znotraj vsebnika HttpHandler se izvaja metoda ProcessRequest za obdelavo HTTP zahtevkov. Ko kontejner HttpHandler obdela celoten HTTP zahtevek, se nadzor vrne HttpModulu, ki nadaljuje s posredovanjem predelanih HTTP informacij o zahtevkih plast za plastjo, dokler jih ne vrne odjemalcu.
Primer
Struktura projekta
Koda MyHttpModule
Registrirajte prilagojen HttpModule v web.config
Brskanje strani Default.aspx
Kakšen je torej vrstni red izvedbe serije dogodkov v življenjskem ciklu?
Prebrskajte rezultate
Uporabite HttpModule za prekinitev HTTP zahteve
Rezultat
Povzetek
Tukaj predstavljamo najpomembnejši vmesnik v življenjskem ciklu asp.net, IHttpModule, ki ga lahko opišemo kot vmesnik za dogodek, saj je v metodi Init v razredu implementacije mogoče registrirati različne dogodke v življenjskem ciklu in določiti različno logiko v dogodku.
|