Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 20191|Atsakyti: 0

[ASP.NET] Asp.Net pristatytas IHttpHandler

[Kopijuoti nuorodą]
Paskelbta 2018-03-13 21:40:17 | | | |
Asp.Net pristatytas IHttpHandler
ASP.NET dvi dažniausiai naudojamos apdorojimo sąsajos atsakant į Http užklausas yra IHttpHandler ir IHttpModule.

Paprastai IHttpHandler naudojamas tam tikro tipo užklausoms tvarkyti, pvz., atskiram kiekvieno *.asp, *.aspx failo apdorojimui. IHttpModule paprastai naudojamas operacijoms, kurios paprastai reikalingos užklausai, pvz., kai kuriems tiems patiems patikrinimams užklausos puslapyje atlikti.

Pažvelkime į IIS serverio apdorojimo veiksmus pateikdami atitinkamą HTTP užklausą. ASP.NET turi dujotiekio sąvoką, o tai reiškia, kad kiekviena ASP.NET užklausa IIS turės atitinkamų operacijų seriją, kad susidarytų į eilutę panaši seka.

ASP.NET dujotiekio įvadas

Pažvelkime į dujotiekio apdorojimo laiko schemą:




Kaip matyti iš paveikslėlio, gavus užklausą, įgyvendinimą apdoroja "HttpModule", o tada iškviečiamas "HttpHandler" metodas "ProcessRequest()", kad būtų pateiktas konkretus atsakymas. Todėl nesunku suprasti, kodėl konkrečios klasės užklausų tvarkymas yra įtrauktas į HttpHandler klasę, atliekant kai kuriuos patikrinimus, kurie yra bendri visoms HttpModule užklausoms.

Kodo praktika
IHttpHandler

Autorius neseniai susidūrė su IHttpHandler naudojimu kliento sąsajos skambučiams projekte tvarkyti, todėl trumpai aptarkime paprastą sąsajos dizainą, pagrįstą IHttpHandler.

IHttpHandler sąsaja turi tik du narius:


Atributas IsReusable identifikuoja, ar HttpHandler objektą gali naudoti kiti egzemplioriai, ir paprastai nustatome jį kaip True. Metodas ProcessRequest() yra konkretus atsakymas į užklausą, todėl čia reikia įdėti tik konkrečią verslo logikos operaciją.

Pirmiausia sukurkite naują žiniatinklio projektą ir pridėkite apdorojimo klasę:

RayHandler klasė įgyvendina IHttpHandler sąsajos funkciją ProcessRequest(), kuri yra tik tiesioginė teksto išvestis.

Tada Web.config faile turime pridėti šią konfigūraciją:


kelias nurodo URL atitiktį, pvz., *.ray, o tai reiškia, kad apdorojimo programa atsakys į URL užklausas, kurios baigiasi ".ray", veiksmažodis nurodo užklausos metodą, pvz., Get/Post, ir * reiškia, kad jis atitinka visus. type nurodo Handler klasės tipą, WebApplication2.RayHandler yra klasės pavadinimas, WebApplication2 nurodo rinkinio pavadinimą Bin kataloge, pavyzdžiui, rinkinio pavadinimas pavyzdyje yra WebApplication2.dll, ir čia nereikia apibrėžti priesagos pavadinimo.

Paleiskite svetainę, įveskite URL, kuris baigiasi ".ray", ir pamatysite šį rezultatą:



IHttpHandlerFactory apžvalga

Kartais mums gali tekti susidurti su keliomis skirtingomis priesagomis, viena priesaga, atitinkanti Handler klasę, ir štai kaip atrodo mūsų Web.config failas:


Jei turime daug HttpHandler diegimo klasių, tada mūsų Web.config failo konfigūracija privalo atrodyti išsamus. Arba kai kuriais atvejais, kai galime tik nustatyti, kuri apdorojimo programa reaguoja, kai programa veikia, turime naudoti IHttpHandlerFactory.

"IHttpHandlerFactory" apibrėžiamas taip:


Tarp jų:

GetHandler(): pateikia egzempliorių, kuris įgyvendina IHttpHandler sąsają;
ReleaseHandler(): leidžia gamyklai pakartotinai naudoti esamą apdorojimo programos egzempliorių.
Paimkite aukščiau pateiktas spindulių ir rss užklausas kaip pavyzdį, įgyvendinkite gamyklos klasę:

Šiuo atveju Web.config konfigūracija yra tokia:


Šiuo metu įgyvendinama gamyklinės klasės naudojimo funkcija, atitinkanti skirtingus konkrečius tvarkytojus, supaprastinant konfigūraciją.

Keičiamo dydžio IHttpHandlerFactory

Aukščiau pateiktame įgyvendinime, jei programai ateityje reikės pridėti naują priesagų tvarkymo metodą, ji turi modifikuoti GetHandler() sakinį Switch, kuris taip pat gali sukelti klaidų ar sukelti kitų saugumo pavojų. Taigi, ar įmanoma išlaikyti "HandlerFactory" klasę nepakitusią vėlesniems plėtiniams?

Atsakymas tikrai yra taip. Skaitytojai, susipažinę su dizaino modeliu, turėtų suprasti, kad tai yra paprastas gamyklos modelis, o norėdami pasiekti ankstesnes funkcijas, galime naudoti projektavimo režimą, vadinamą išplėstiniais taškais.

Čia taip pat galime naudoti C# kalbos funkciją - atspindį. Naudodami C# atspindžio mechanizmą, mes atspindime atitinkamą Hanlder tipą pagal URL priesagą, jei sutariame dėl URL priesagos pavadinimo ir apdorojimo programos klasės pavadinimo atitikimo.

Pavyzdžiui, GetHandler() perrašome taip:

Tokiu atveju jums tereikia įdėti Handler klasę į metodą toje pačioje vardų srityje kaip ir HandlerFactory klasė ir teisingai sukonfigūruoti ją Web.config. Pavyzdžiui, jei yra RayHandler klasė, reikia pridėti šią konfigūraciją, kad ji automatiškai atitiktų:



suvestinė
Šiame straipsnyje trumpai pristatomas IHttpHandler naudojimas ASP.NET, pateikiamas IHttpHandlerFactory įgyvendinimas apdorojant kelias apdorojimo užklausas ir galiausiai patobulinamas keičiamo dydžio kelių užklausų apdorojimo programos įgyvendinimas naudojant C# atspindžio mechanizmą.





Ankstesnis:asp.net Aiškinamoji HttpContext reikšmė
Kitą:asp.net IHttpModule sąsaja išsamiai paaiškinta
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com