Kako raditi s HTTPHandlerima u ASP.Netu

HTTPhandler može se definirati kao krajnja točka koja se izvršava kao odgovor na zahtjev i koristi se za obradu određenih zahtjeva na temelju proširenja. Izvršni mehanizam ASP.Net odabire odgovarajućeg rukovatelja za posluživanje dolaznog zahtjeva na temelju proširenja datoteke URL-a zahtjeva. Naprotiv, HttpModule je komponenta koja je dio cjevovoda za obradu zahtjeva ASP.Net i poziva se na svaki zahtjev koji je upućen vašoj aplikaciji. Primijetite da je osnovni cilj i HTTPhandlera i HttpModula ubrizgavanje logike predobrade u cjevovod.

Pretpostavimo da vaša aplikacija mora posluživati ​​slike različitih veličina - možete iskoristiti prilagođeni HTTPhandler da biste promijenili veličinu tih slika i poslali odgovor natrag. Drugi je scenarij u kojem biste možda željeli koristiti prilagođeni HTTPhandler kada želite izvršiti neku logiku predobrade u svojoj aplikaciji na temelju proširenja. Iako s HTTPhandlerom možete učiniti gotovo sve što možete učiniti i sa svojom ASP.Net stranicom, HTTPhandleri su puno prenosiviji i mogu se ponovno upotrijebiti od vaših web stranica.

Kada zahtjev za resursom dođe u ASP.Net Engine, ASP.Net Worker Process zauzvrat instancira odgovarajući HTTPhandler za posluživanje zahtjeva na temelju proširenja. HTTPhandler u ASP.Netu je klasa koja implementira IHTTPhandler sučelje. Inače, sučelje IHTTPhandler dostupno je u prostoru imena System.Web. Imajte na umu da PageHandlerFactory implementira sučelje IHTTPhandlerFactory i sadrži metodu koja se naziva GetHandler koja je zauzvrat odgovorna za vraćanje odgovarajućeg obrađivača na poslužitelj određenog zahtjeva.

MSDN navodi: "ASP.Net HTTPhandler je postupak (često se naziva" krajnja točka ") koji se pokreće kao odgovor na zahtjev upućen web-aplikaciji ASP.Net. Najčešći rukovatelj je ASP.Net rukovatelj stranicama koja obrađuje .aspx datoteke. Kada korisnici zatraže .aspx datoteku, stranica obrađuje zahtjev putem rukovatelja stranice. "

Stvaranje prilagođenog HTTP rukovatelja

U ovom ćemo odjeljku istražiti kako možemo izraditi prilagođeni HTTPhandler u ASP.Netu. Da biste izgradili prilagođeni HTTPhandler, stvorite klasu koja implementira IHTTPhandler kako je prikazano u isječku koda u nastavku.

namespace CustomHTTPhandler

{

   public class CustomHTTPhandler : IHTTPhandler

   {

       public bool IsReusable

       {

           get { return false; }

       }

       public void ProcessRequest(HttpContext context)

       {

           throw new NotImplementedException();

       }

   }

}

Imajte na umu da bi vaš prilagođeni HTTP rukovatelj trebao imati svojstvo pod nazivom IsReusable i metodu koja se zove ProcessRequest. Iako se prvi koristi za određivanje može li se rukovatelj ponovno upotrijebiti, drugi je metoda koja vrši stvarnu obradu umjesto vas. U osnovi, svaki prilagođeni HTTPHandler trebao bi implementirati sučelje IHttphandler i definirati ta dva člana.

Registriranje vašeg voditelja

Podaci o mapiranju za HTTP rukovatelje dostupni su u konfiguracijskim datotekama. Evo kako bi mogao izgledati odjeljak vaše datoteke machine.config.

Sada biste također trebali obavijestiti runtime kada treba pozvati vaš prilagođeni HTTPhandler. Gdje biste to trebali navesti? Pa takve detalje možete navesti u datoteci web.config. Možete dodati i ukloniti HTTP rukovatelje pomoću odjeljka za konfiguraciju u konfiguracijskoj datoteci aplikacija. Evo kako možete registrirati svog rukovatelja u datoteci web.config aplikacije.

  

Pa, što smo radili ovdje? Upravo smo registrirali naš rukovatelj i naveli smo da ako stigne bilo koji zahtjev za produženje .idgaspx, takav bi se zahtjev trebao preusmjeriti u prilagođeni Http rukovač pod nazivom CustomHTTPhandler.

Imajte na umu da za razliku od .aspx web stranica, HTTP obrađivači nemaju vizualne elemente. Možete stvoriti svoje HTTP rukovatelje u prilagođenoj knjižnici, a zatim ih ponovno upotrijebiti kad i kada su potrebni.

Asinkroni HTTPHandlers

Novije verzije ASP.Net pružaju podršku za asinkrone Http rukovatelje. Možete iskoristiti async / await i TPL za izgradnju asinkronih HTTP rukovatelja u ASP.Netu. Da biste stvorili prilagođeni asinkroni HTTPhandler, trebali biste naslijediti klasu HttpTaskAsyncHandler. Apstraktna klasa HttpTaskAsyncHandler zauzvrat implementira sučelja IHttpAsyncHandler i IHTTPhandler. Sljedeći isječak koda ilustrira kako naš prilagođeni asinkroni HTTPhandler izgleda na prvi pogled.

   public class CustomHTTPhandler : HttpTaskAsyncHandler

   {

       public override Task ProcessRequestAsync(HttpContext context)

       {

           throw new NotImplementedException();

       }

   }