See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 20191|Vastuse: 0

[ASP.NET] Asp.Net IHttpHandler tutvustati

[Kopeeri link]
Postitatud 13.03.2018 21:40:17 | | | |
Asp.Net IHttpHandler tutvustati
ASP.NET kaks sagedamini kasutatavat töötlemisliidest Http-päringutele vastamisel on IHttpHandler ja IHttpModule.

Üldiselt kasutatakse IHttpHandlerit konkreetse päringutüübi haldamiseks, näiteks iga *.asp, *.aspx faili eraldi töötlemiseks. IHttpModule'i kasutatakse tavaliselt operatsioonide haldamiseks, mis on tavaliselt päringu jaoks vajalikud, näiteks samade kontrollide tegemiseks päringu lehel.

Vaatame IIS-serveri töötlemisetappe vastava HTTP päringu tegemisel. ASP.NET kasutab torujuhtme kontseptsiooni, mis tähendab, et iga ASP.NET päringu puhul on IIS-is vastav jada, moodustades rea-laadse järjestuse.

ASP.NET torujuhtme tutvustus

Vaatame torujuhtme töötlemise ajastusdiagrammi:




Nagu jooniselt näha, töödeldakse HttpModule pärast päringu saabumist rakendust ja seejärel kutsutakse HttpHandleri ProcessRequest() meetod, et anda konkreetne vastus. Seetõttu ei ole raske mõista, miks klassispetsiifiliste päringute käsitlemine on paigutatud HttpHandleri klassi, tehes samal ajal mõningaid kontrolle, mis on ühised kõigile HttpModule'i päringutele.

Koodipraktika
IHttpHandler

Autor sattus hiljuti projektis IHttpHandleri kasutamisele kliendiliidese kõnede haldamiseks, seega räägime lühidalt lihtsast liidese disainist, mis põhineb IHttpHandleril.

IHttpHandler liidesel on ainult kaks liiget:


IsReusable atribuut tuvastab, kas HttpHandler objekti saab kasutada ka teistes instantsides, ja tavaliselt seame selle tõeks. ProcessRequest() meetod on konkreetne vastus taotlusele ja siia tuleb sisestada ainult konkreetne äriloogika operatsioon.

Esiteks loo uus veebiprojekt ja lisa Handleri klass:

RayHandler klass rakendab IHttpHandler liidese ProcessRequest() funktsiooni, mis on lihtsalt tekstitüki otsene väljund.

Seejärel peame Web.config faili lisama järgmise konfiguratsiooni:


path näitab URL-i sobitamist, näiteks *.ray, mis tähendab, et Handler vastab URL-päringutele, mis lõpevad ".ray"-ga, verb näitab päringu meetodit, näiteks Get/Post, ja * tähendab, et see vastab kõigile. type tähistab Handleri klassi tüüpi, WebApplication2.RayHandler on klassi nimi, WebApplication2 viitab assamblee nimele Bin kataloogis, näiteks assamblee nimi näites on WebApplication2.dll ja siin pole vaja järelliite nime määratleda.

Alusta saiti, sisesta URL, mis lõpeb ".ray"-ga, ja näed järgmist tulemust:



IHttpHandlerFactory ülevaade

Mõnikord peame tegelema mitme erineva sufiksiga, üks sufiks vastab Handler klassile, ja meie Web.config fail näeb välja selline:


Kui meil on palju HttpHandleri rakendusklasse, siis meie Web.config failikonfiguratsioon näeb kindlasti välja sõnakas. Või mõnel juhul, kui saame teada, milline Handler reageerib programmi töötamise ajal, peame kasutama IHttpHandlerFactory.

IHttpHandlerFactory on defineeritud järgmiselt:


Nende hulgas:

GetHandler(): Tagastab instantsi, mis rakendab IHttpHandler liidest;
ReleaseHandler(): Võimaldab tehasel taaskasutada olemasolevat Handleri instantsi.
Võtame ülaltoodud kiir- ja rss-päringud näiteks, rakendage tehase klass:

Sellisel juhul on Web.config konfiguratsioon järgmine:


Sel ajal rakendatakse funktsiooni kasutada tehase klassi erinevate konkreetsete käsitlejate jaoks, mis lihtsustab konfiguratsiooni.

Skaleeritav IHttpHandlerFactory

Ülaltoodud rakenduses, kui programm peab tulevikus lisama uue sufiksi käsitlemise meetodi, peab ta muutma Switchi lauset GetHandler(), mis võib samuti põhjustada vigu või tuua kaasa muid turvariske. Kas on võimalik hoida HandlerFactory klass muutumatuna ka järgmiste laienduste jaoks?

Vastus on kindlasti jah. Lugejad, kes on disainimustriga tuttavad, peaksid mõistma, et tegemist on lihtsa tehase mustriga, ning eelnevate funktsioonide saavutamiseks saame kasutada disainirežiimi, mida nimetatakse täiustatud punktideks.

Siin saame kasutada ka C# keele omadust – peegeldust. C# peegeldusmehhanismi kaudu kajastame vastavat Hanlderi tüüpi vastavalt URL-i sufiksile, kui lepime kokku URL-i sufiksi nime ja Handleri klassinime vastavuses.

Näiteks kirjutame GetHandler() ümber järgmiselt:

Sellisel juhul tuleb sisestada Handler klass samasse nimeruumi kui HandlerFactory klass ja seadistada see õigesti Web.config-is. Näiteks, kui on olemas RayHandler klass, tuleks lisada järgmine konfiguratsioon, et see automaatselt sobituda:



Kokkuvõte
See artikkel tutvustab lühidalt IHttpHandleri kasutamist ASP.NET. aastal, pakub IHttpHandlerFactory rakendust mitme Handleri päringu töötlemisel ning lõpuks täiustab skaleeritavat mitme päringuga Handleri rakendust, kasutades C# peegeldusmehhanismi.





Eelmine:asp.net HttpContexti selgitav tähendus
Järgmine:asp.net IHttpModule liidest selgitatakse üksikasjalikult
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com