Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 20191|Odgovoriti: 0

[ASP.NET] Asp.Net Uveden IHttpHandler

[Kopiraj povezavo]
Objavljeno na 13. 03. 2018 21:40:17 | | | |
Asp.Net Uveden IHttpHandler
ASP.NET dva pogosto uporabljena procesorska vmesnika pri odgovarjanju na HTTP zahteve sta IHttpHandler in IHttpModule.

Na splošno se IHttpHandler uporablja za obdelavo določene vrste zahtev, kot je ločena obdelava vsake datoteke *.asp, *.aspx. IHttpModule se običajno uporablja za izvajanje operacij, ki so običajno potrebne za zahtevo, kot je izvajanje nekaterih istih preverjanj na strani zahteve.

Poglejmo si postopke obdelave na IIS strežniku pri oddaji ustrezne HTTP zahteve. ASP.NET ima koncept cevovoda, kar pomeni, da bo vsaka ASP.NET zahteva imela niz ustreznih operacij v IIS, da tvori zaporedje, podobno liniji.

ASP.NET uvod v cevovod

Poglejmo diagram časovnega procesiranja cevovoda:




Kot je razvidno iz slike, ko zahteva prispe, implementacijo obdela HttpModule, nato pa se pokliče metoda ProcessRequest() iz HttpHandlerja za specifičen odgovor. Zato ni težko razumeti, zakaj je obravnava zahtev, specifičnih za razred, postavljena v razred HttpHandler, hkrati pa opravi nekatere preglede, ki so skupni vsem zahtevam v HttpModule.

Praksa kodiranja
IHttpHandler

Avtor je pred kratkim naletel na uporabo IHttpHandlerja za upravljanje klicev odjemalskega vmesnika v projektu, zato si na kratko ogovorimo preprosto zasnovo vmesnika, ki temelji na IHttpHandlerju.

Vmesnik IHttpHandler ima le dva člana:


Atribut IsReusable določa, ali lahko objekt HttpHandler uporabljajo tudi drugi primerki, običajno pa ga nastavimo na True. Metoda ProcessRequest() je specifičen odgovor na zahtevo, tukaj pa moramo vnesti le specifično poslovno logično operacijo.

Najprej ustvarite nov spletni projekt in dodajte razred Handler:

Razred RayHandler izvaja funkcijo ProcessRequest() vmesnika IHttpHandler, ki je le neposreden izhod besedila.

Nato moramo v datoteko Web.config dodati naslednjo konfiguracijo:


path označuje ujemanje URL-jev, kot je *.ray, kar pomeni, da bo Handler odgovoril na URL zahteve, ki se končajo na ".ray", glagol označuje način zahteva, kot je Get/Post, * pa pomeni, da se ujema z vsemi. type označuje vrsto razreda Handler, WebApplication2. RayHandler je ime razreda, WebApplication2 se nanaša na ime sestavljanja v mapi Bin, na primer, ime sestavljanja v primeru je WebApplication2.dll, in tukaj ni potrebe po definiranju imena pripone.

Zaženi stran, vnesi URL, ki se konča na ".ray", in vidiš naslednji rezultat:



Pregled IHttpHandlerFactory

Včasih se moramo ukvarjati z več različnimi priponami, ena pripona ustreza razredu Handler, in tako izgleda naša Web.config datoteka:


Če imamo veliko razredov implementacije HttpHandler, bo naša konfiguracija Web.config datotek zagotovo videti obširno. Ali pa v nekaterih primerih, ko lahko določimo le, kateri Handler odgovarja med izvajanjem programa, moramo uporabiti IHttpHandlerFactory.

IHttpHandlerFactory je definiran takole:


Med njimi:

GetHandler(): Vrne instanco, ki implementira vmesnik IHttpHandler;
ReleaseHandler(): Omogoča Factory ponovno uporabo obstoječe instance Handlerja.
Vzemimo zgornji žarek in rss zahteve kot primer, implementirajte razred Factory:

V tem primeru je konfiguracija v Web.config naslednja:


Takrat je implementirana funkcija uporabe razreda Factory za upodobitev različnim specifičnim handlerjem, kar poenostavi konfiguracijo.

Skalabilna IHttpHandlerFactory

V zgornji implementaciji, če bo program v prihodnosti potreboval novo metodo za upravljanje pripon, mora spremeniti ukaz Switch v GetHandler(), kar lahko prav tako povzroči napake ali prinaša druga varnostna tveganja. Torej, ali je mogoče ohraniti razred HandlerFactory nespremenjen za naslednje razširitve?

Odgovor je zagotovo da. Bralci, ki poznajo oblikovalski vzorec, bi morali razumeti, da gre za preprost tovarniški vzorec, in za dosego prejšnjih funkcij lahko uporabimo način načrtovanja, imenovan napredne točke.

In tukaj lahko uporabimo tudi jezikovno funkcijo jezika C# – refleksijo. S pomočjo refleksijskega mehanizma C# odražamo ustrezni Händrov tip glede na pripono URL-ja, dokler se strinjamo glede ustreznosti med imenom pripone URL-ja in imenom razreda Handlerja.

Na primer, GetHandler() prepišemo na naslednji način:

V tem primeru morate razred Handler le vstaviti v metodo pod isti imenski prostor kot razred HandlerFactory in ga pravilno konfigurirati v Web.config. Na primer, če obstaja razred RayHandler, je treba dodati naslednjo konfiguracijo, da se samodejno ujema:



Povzetek
Ta članek na kratko predstavi uporabo IHttpHandlerja v ASP.NET, omogoča implementacijo IHttpHandlerFactory pri obdelavi več zahtevkov Handlerja in nazadnje izboljšuje razširljivo implementacijo večzahtevnega Handlerja z uporabo refleksijskega mehanizma C#.





Prejšnji:asp.net Razlagalni pomen HttpContext
Naslednji:asp.net IHttpModule vmesnik je podrobno razložen
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com