Asp.Net ieviests IHttpHandler ASP.NET divi bieži izmantotie apstrādes interfeisi, atbildot uz Http pieprasījumiem, ir IHttpHandler un IHttpModule.
Parasti IHttpHandler tiek izmantots, lai apstrādātu noteikta veida pieprasījumu, piemēram, atsevišķu katra *.asp, *.aspx faila apstrādi. IHttpModule parasti tiek izmantots, lai apstrādātu darbības, kas parasti ir nepieciešamas pieprasījumam, piemēram, veiktu dažas no tām pašām pārbaudēm pieprasījuma lapā.
Apskatīsim IIS servera apstrādes soļus, veicot atbilstošo HTTP pieprasījumu. ASP.NET ir cauruļvada jēdziens, kas nozīmē, ka katram ASP.NET pieprasījumam IIS būs virkne atbilstošu operāciju, lai izveidotu līnijai līdzīgu secību.
ASP.NET cauruļvada ieviešana
Apskatīsim cauruļvada apstrādes laika diagrammu:
Kā redzams no attēla, pēc pieprasījuma saņemšanas ieviešanu apstrādā HttpModule, un pēc tam tiek izsaukta HttpHandler metode ProcessRequest(), lai sniegtu konkrētu atbildi. Tāpēc nav grūti saprast, kāpēc klases specifisku pieprasījumu apstrāde tiek ievietota HttpHandler klasē, veicot dažas pārbaudes, kas ir kopīgas visiem HttpModule pieprasījumiem.
Kodeksa prakse
IHttpHandler
Autors nesen saskārās ar IHttpHandler izmantošanu, lai apstrādātu klienta interfeisa zvanus projektā, tāpēc īsumā apspriedīsim vienkāršo interfeisa dizainu, kas balstīts uz IHttpHandler.
IHttpHandler interfeisam ir tikai divi dalībnieki:
Atribūts IsReusable identificē, vai HttpHandler objektu var izmantot citas instances, un mēs parasti to iestatām uz True. Metode ProcessRequest() ir īpaša atbilde uz pieprasījumu, un mums šeit ir jāievieto tikai konkrētā biznesa loģikas operācija.
Vispirms izveidojiet jaunu tīmekļa projektu un pievienojiet Handler klasi:
RayHandler klase ievieš IHttpHandler interfeisa funkciju ProcessRequest(), kas ir tikai tieša teksta izvade.
Tad failā Web.config mums jāpievieno šāda konfigurācija:
ceļš norāda URL atbilstību, piemēram, *.ray, kas nozīmē, ka apdarinātājs atbildēs uz URL pieprasījumiem, kas beidzas ar ".ray", darbības vārds norāda pieprasījuma metodi, piemēram, Get/Post, un * nozīmē, ka tas atbilst visiem. tips norāda Handler klases tipu, WebApplication2.RayHandler ir klases nosaukums, WebApplication2 attiecas uz montāžas nosaukumu Bin direktorijā, piemēram, piemērā ir WebApplication2.dll, un šeit nav nepieciešams definēt sufiksa nosaukumu.
Sāciet vietni, ievadiet URL, kas beidzas ar ".ray", un jūs varat redzēt šādu rezultātu:
IHttpHandlerFactory pārskats
Dažreiz mums var būt jārisina vairāki dažādi sufiksi, viens sufikss, kas atbilst Handler klasei, un šādi izskatās mūsu Web.config fails:
Ja mums ir daudz HttpHandler ieviešanas klases, tad mūsu Web.config faila konfigurācija noteikti izskatīsies izsmeļoša. Vai dažos gadījumos, kad mēs varam tikai noteikt, kurš apstrādātājs reaģē, kad programma darbojas, mums jāizmanto IHttpHandlerFactory.
IHttpHandlerFactory ir definēts šādi:
Starp tiem ir:
GetHandler(): atgriež instanci, kas ievieš IHttpHandler interfeisu; ReleaseHandler(): ļauj rūpnīcai atkārtoti izmantot esošu apdarinātāja instanci. Kā piemēru ņemiet iepriekš minētos staru un rss pieprasījumus, ieviesiet rūpnīcas klasi:
Šajā gadījumā Web.config konfigurācija ir šāda:
Šajā laikā tiek īstenota rūpnīcas klases izmantošanas funkcija, lai atbilstu dažādiem konkrētiem apstrādātājiem, vienkāršojot konfigurāciju.
Mērogojama IHttpHandlerFactory
Iepriekš minētajā ieviešanā, ja programmai nākotnē ir jāpievieno jauna sufiksu apstrādes metode, tai ir jāmaina Switch priekšraksts GetHandler(), kas var arī izraisīt kļūdas vai radīt citus drošības riskus. Tātad, vai ir iespējams saglabāt HandlerFactory klasi nemainīgu nākamajiem paplašinājumiem?
Atbilde noteikti ir jā. Lasītājiem, kuri ir iepazinušies ar dizaina modeli, jāsaprot, ka tas ir vienkāršs rūpnīcas modelis, un, lai sasniegtu iepriekšējās funkcijas, mēs varam izmantot dizaina režīmu, ko sauc par uzlabotiem punktiem.
Un šeit mēs varam izmantot arī C# valodas valodas funkciju - atspoguļojumu. Izmantojot C# atstarošanas mehānismu, mēs atspoguļojam atbilstošo Hanlder tipu atbilstoši URL sufiksam, ja vien mēs vienojamies par atbilstību starp URL sufiksa nosaukumu un apstrādātāja klases nosaukumu.
Piemēram, mēs pārrakstām GetHandler() šādi:
Šajā gadījumā jums ir nepieciešams ievietot Handler klasi metodē ar to pašu nosaukumtelpu kā HandlerFactory klasi un pareizi konfigurēt to Web.config. Piemēram, ja ir RayHandler klase, tad automātiski jāatbilst šādai konfigurācijai:
Kopsavilkuma Šis raksts īsumā iepazīstina ar IHttpHandler izmantošanu ASP.NET, nodrošina IHttpHandlerFactory ieviešanu vairāku apstrādātāja pieprasījumu apstrādē un, visbeidzot, uzlabo mērogojamu vairāku pieprasījumu apstrādātāja ieviešanu, izmantojot C# atspoguļošanas mehānismu.
|