Programiranje

Kako delati z HTTPHandlers v ASP.Net

HTTPhandler je lahko definiran kot končna točka, ki se izvede kot odgovor na zahtevo in se uporablja za obdelavo določenih zahtev na podlagi razširitev. Izvajalni mehanizem ASP.Net izbere ustreznega upravljavca, ki bo služil dohodni zahtevi na podlagi razširitve datoteke URL-ja zahteve. Nasprotno, HttpModule je komponenta, ki je del cevovoda za obdelavo zahtev ASP.Net in se zahteva pri vsaki zahtevi, ki je poslana vaši aplikaciji. Upoštevajte, da je osnovni cilj HTTPhandlerjev in HttpModules vbrizgati logiko predobdelave v cevovod.

Predpostavimo, da mora vaša aplikacija prikazovati slike različnih velikosti - izkoristite lahko HTTPhandler po meri, da spremenite velikost teh slik in odgovor pošljete nazaj. Drug scenarij, ko boste morda želeli uporabiti HTTPhandler po meri, je, ko želite v svoji aplikaciji na podlagi razširitev izvesti nekaj logike predobdelave. Čeprav lahko z HTTPhandlerjem storite skoraj vse, kar lahko storite tudi s svojo stranjo ASP.Net, so HTTPhandlerji veliko bolj prenosni in za večkratno uporabo kot vaše spletne strani.

Ko zahteva za vir pride v ASP.Net Engine, ASP.Net Worker Process nato ustvari ustrezen HTTPhandler za strežnik zahteve na podlagi razširitve. HTTPhandler v ASP.Net je razred, ki izvaja vmesnik IHTTPhandler. Mimogrede, vmesnik IHTTPhandler je na voljo v imenskem prostoru System.Web. Upoštevajte, da PageHandlerFactory implementira vmesnik IHTTPhandlerFactory in vsebuje metodo, imenovano GetHandler, ki je odgovorna za vrnitev ustreznega upravljavca na strežnik določene zahteve.

MSDN navaja: "ATP.Net HTTPhandler je postopek (pogosto imenovan tudi" končna točka "), ki se zažene kot odziv na zahtevo, poslano spletni aplikaciji ASP.Net. Najpogostejši obravnavalec je ASP.Net ki obdeluje datoteke .aspx. Ko uporabniki zahtevajo datoteko .aspx, stran obdela zahtevo prek obdelovalca strani. "

Ustvarjanje HTTPhandlerja po meri

V tem poglavju bomo raziskali, kako lahko v ASP.Net zgradimo HTTPhandler po meri. Če želite zgraditi HTTPhandler po meri, ustvarite razred, ki implementira IHTTPhandler, kot je prikazano v spodnjem delčku kode.

imenski prostor CustomHTTPhandler

{

javni razred CustomHTTPhandler: IHTTPhandler

   {

javni bool IsReusable

       {

get {return false; }

       }

javna void ProcessRequest (kontekst HttpContext)

       {

vrzi novo NotImplementedException ();

       }

   }

}

Upoštevajte, da mora imeti vaš obdelovalec HTTP po meri lastnost, imenovano IsReusable, in metodo, imenovano ProcessRequest. Medtem ko se prvi uporablja za določitev, ali je obdelovalca mogoče ponovno uporabiti, je drugi način, ki za vas opravi dejansko obdelavo. V bistvu bi moral vsak HTTPHandler po meri implementirati vmesnik IHttphandler in definirati ta dva člana.

Registracija vašega vodnika

Informacije o preslikavi za HTTPhandlers so na voljo v konfiguracijskih datotekah. Tukaj je videti, kako lahko izgleda razdelek vaše datoteke machine.config.

Zdaj bi morali tudi izvajalcu sporočiti, kdaj je treba priklicati vaš HTTPhandler po meri. Kje bi to morali določiti? No, lahko te podrobnosti navedete v datoteki web.config. HTTPhandlerje lahko dodate in odstranite s pomočjo razdelka za konfiguracijo v konfiguracijski datoteki aplikacij. Tukaj je opisano, kako lahko prijavite svojega vodnika v datoteko web.config aplikacije.

  

Torej, kaj smo počeli tukaj? Pravkar smo registrirali našega upravljavca in navedli, da je treba, če pride katera koli zahteva za razširitev .idgaspx, takšno zahtevo preusmeriti v Http Handler po meri z imenom CustomHTTPhandler.

Upoštevajte, da za razliko od spletnih strani .aspx HTTPhandlers nimajo vizualnih elementov. Izdelovalce HTTP lahko ustvarite v knjižnici po meri in jih nato znova uporabite, kadar koli so potrebni.

Asinhroni HTTPHandlers

Novejše različice ASP.Net nudijo podporo za asinhrone upravljavce Http. Async / await in TPL lahko izkoristite za izdelavo asinhronih HTTPhandlerjev v ASP.Net. Če želite ustvariti asinhroni HTTPhandler po meri, morate podedovati razred HttpTaskAsyncHandler. Abstraktni razred HttpTaskAsyncHandler nato implementira vmesnika IHttpAsyncHandler in IHTTPhandler. Naslednji delček kode ponazarja, kako izgleda naš asinhroni HTTPhandler po meri na prvi pogled.

javni razred CustomHTTPhandler: HttpTaskAsyncHandler

   {

javno preglasitev opravila ProcessRequestAsync (kontekst HttpContext)

       {

vrzi novo NotImplementedException ();

       }

   }

$config[zx-auto] not found$config[zx-overlay] not found