Előre írva
Az IHttpModule releváns tartalmával kapcsolatban az interjú során engem is megkérdeztek, és halványan úgy éreztem, hogy ennek az interfésznek van egy Init módszere, amely képes eseménysorozatot regisztrálni az Init módszerrel az implementációs osztályban. Otthon ezen a hétvégén igazából nincs mit tenni, még akkor sem, ha ellenőrizni és kiegészíteni a hiányosságokat ebben a tudásban.
IHttpModule munkái
Azok a barátok, akik ismerik asp.net életciklust, tudják, hogy a HttpModule végrehajtása a HttpHandler előtt történik, majd egy sor HttpModule esemény végrehajtása után, majd a HttpHandler futtatása, majd néhány HttpModule esemény végrehajtása után. Részletekért kérjük, tekintse meg az alábbi életciklus-diagramot.
A HttpHandler a HTTP kérés kezelésére alkalmas, a HttpModule pedig az "egyetlen mód" egy HTTP kéréshez, így néhány szükséges információt hozzáadhatsz a HTTP kérés adatai fölé, mielőtt ezt a HTTP kérést továbbítanák a valódi kérésfeldolgozó központba (HttpHandler), vagy további munkát végezhetsz az elfogott HTTP kérés információin. Vagy bizonyos esetekben egyszerűen megszüntethetjük azokat a HTTP kéréseket, amelyek megfelelnek bizonyos feltételeknek, és ezek szűrőként működhetnek.
Egy HTTP kérés továbbításra kerül a HttpHandler konténerbe (ResolveRequestCache esemény) a HttpModule konténer kézbesítése során. E esemény után a HttpModule konténer létrehoz egy belépő példányt a HttpHandlerből, de ahelyett, hogy átadja volna a HTTP kérés irányítását, továbbra is indítja az AcquireRequestState és a PreRequestHandlerExcute eseményeket. A PreRequestHandlerExcute esemény után a HttpModule ablak ideiglenesen átadja az irányítást a HttpHandler konténernek a valódi HTTP kérésfeldolgozás érdekében.
A HttpHandler konténerben a ProcessRequest metódus fut le HTTP kérések kezelésére. Miután a konténer HttpHandler feldolgozza az egész HTTP kérést, visszaadja az irányítást a HttpModulnak, amely rétegről rétegre továbbítja a feldolgozott HTTP kérés információáramlását, amíg vissza nem tér az ügyfélhez.
Egy példa
Projekt szerkezete
MyHttpModule kód
Regisztrálj egy egyedi HttpModule a web.config oldalon
Böngéssze az oldalt Default.aspx
Mi a végrehajtási sorrend az életciklus eseménysorozatában?
Böngésszük az eredményeket
Használd a HttpModule használatát a Http kérés megszüntetéséhez
eredmény
összefoglalás
Itt bemutatjuk a asp.net életciklus legfontosabb interfészét, az IHttpModule-t, amely eseményinterfészként is leírható, mert az implementációs osztály Init módszerében az életciklus különböző eseményei regisztrálhatók, és különböző logikai elemek definiálhatók az eseményben.
|