Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 20191|Válasz: 0

[ASP.NET] Asp.Net IHttpHandler bemutatása

[Linket másol]
Közzétéve 2018. 03. 13. 21:40:17 | | | |
Asp.Net IHttpHandler bemutatása
ASP.NET két leggyakrabban használt feldolgozó interfész Http-kérésekre válaszoláskor az IHttpHandler és az IHttpModule.

Általánosságban az IHttpHandler egy adott típusú kérés kezelésére szolgál, például minden *.asp, *.aspx fájl külön feldolgozására. Az IHttpModule-t általában olyan műveletekre használják, amelyek általában szükségesek a kéréshez, például ugyanazok az ellenőrzések végrehajtására a kérés oldalán.

Nézzük meg az IIS szerver feldolgozási lépéseit, amikor a megfelelő HTTP kérést készítjük. ASP.NET rendelkezik a pipeline fogalmaval, ami azt jelenti, hogy minden ASP.NET kérésnek egy sor IIS művelete lesz, hogy sorszerű sorozatot alkossanak.

ASP.NET bevezetés a pipeline

Nézzük meg a csővezeték feldolgozási időzítési diagramját:




Ahogy az ábrán látható, a kérés megérkezése után a megvalósítást a HttpModule feldolgozza, majd a HttpHandler ProcessRequest() módszerét hívja a konkrét válaszhoz. Ezért nem nehéz megérteni, miért helyezik el az osztályspecifikus kérések kezelését a HttpHandler osztályba, miközben olyan ellenőrzéseket végzünk, amelyek a HttpModul minden kérésére jellemzőek.

Kódgyakorlat
IHttpHandler

A szerző nemrégiben rátalált az IHttpHandler alkalmazására a kliens interfész hívások kezelésére a projektben, ezért röviden beszéljük az IHttpHandler-en alapuló egyszerű interfésztervezést.

Az IHttpHandler felület csak két tagból áll:


Az IsReusable attribútum azonosítja, hogy a HttpHandler objektumot más példányok is használhatják-e, és általában True-ra állítjuk be. A ProcessRequest() metódus egy konkrét válasz a kérésre, és csak a konkrét üzleti logikai műveletet kell ide helyeznünk.

Először hozz létre egy új webprojektet, és adj hozzá egy Handler osztályt:

A RayHandler osztály az IHttpHandler interfén található ProcessRequest() funkcióját valósítja meg, amely egy szöveg közvetlen kimenete.

Ezután a következő konfigurációt kell hozzáadnunk a Web.config fájlba:


path URL-egyezést jelöl, például *.ray, ami azt jelenti, hogy a kezelő válaszol az ".ray" végű URL-kérvényekre, ige a kérési módszert, például Get/Post, és a * azt jelenti, hogy mindegyikhez egyezik. type jelzi a Handler osztály típusát, WebApplication2. RayHandler az osztály neve, WebApplication2 a Bin könyvtárban lévő assembly nevére utal, például a példában az assembly neve WebApplication2.dll, és itt nincs szükség szenfíznév meghatározására.

Indítsd el az oldalt, írd be az ".ray" végű URL-t, és a következő eredményt láthatod:



IHttpHandlerFactory áttekintés

Néha több különböző toldalataggal kell foglalkoznunk, az egyik toldaltag egy Handler osztálynak felel meg, és így néz ki a Web.config fájlunk:


Ha sok HttpHandler implementációs osztályunk van, akkor a Web.config fájl konfigurációja biztosan bőbeszédűnek tűnik. Vagy bizonyos esetekben, amikor csak azt tudjuk meghatározni, melyik Handler reagál a program futásakor, akkor az IHttpHandlerFactory funkciót kell használnunk.

Az IHttpHandlerFactory a következőképpen definiálható:


Közöttük:

GetHandler(): Egy példányt ad vissza, amely megvalósítja az IHttpHandler interfészt;
ReleaseHandler(): Lehetővé teszi a Factory számára, hogy újrahasznosítson egy meglévő Handler példányt.
Vegyük például a fenti ray és rss kéréseket, valósítsuk meg a Factory osztályt:

Ebben az esetben a Web.config konfigurációja a következő:


Ekkor megvalósítják a Factory osztály használatát különböző specifikus kezelők megfelelőjére, egyszerűsítve a konfigurációt.

Skálázható IHttpHandlerFactory

A fenti megvalósításban, ha a programnak a jövőben új sufffix kezelési módszert kell hozzáadnia, módosítania kell a GetHandler() Switch utasítását, ami hibákat okozhat vagy egyéb biztonsági kockázatokat is okozhat. Szóval, lehetséges-e a HandlerFactory osztályt változatlan megtartani a későbbi bővítéseknél?

A válasz határozottan igen. Azoknak, akik ismerik a tervezési mintát, meg kell érteniük, hogy ez egy egyszerű gyári minta, és a korábbi funkciók eléréséhez használhatjuk a fejlett pontok nevű tervezési módot.

Itt használhatjuk a C# nyelv nyelvi funkcióját is – a reflexiót. A C# visszatükrözési mechanizmusán keresztül tükrözzük a megfelelő Hanlder típust az URL utótagja szerint, amennyiben egyetértünk az URL utótag neve és a kezelő osztályneve közötti egyezésben.

Például a GetHandler()-t a következőképpen írjuk át:

Ebben az esetben csak a Handler osztályt kell a metódusban ugyanabban a névtérben behelyezni, mint a HandlerFactory osztály, és helyesen konfigurálni a Web.config-ban. Például, ha létezik RayHandler osztály, akkor a következő konfigurációt kell hozzáadni, hogy automatikusan egyezzen:



összefoglalás
Ez a cikk röviden bemutatja az IHttpHandler használatát ASP.NET-ben, biztosítja az IHttpHandlerFactory megvalósítását több Handler kérés feldolgozásában, végül pedig fejleszti a C# tükröződési mechanizmusával a skálázható többkéréses Handler megvalósítást.





Előző:asp.net A HttpContext magyarázó jelentése
Következő:asp.net IHttpModule interfészt részletesen ismerteti
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com