Programmering

Hvordan jobbe med HTTPHandlers i ASP.Net

En HTTP-håndterer kan defineres som et sluttpunkt som utføres som svar på en forespørsel og brukes til å håndtere spesifikke forespørsler basert på utvidelser. ASP.Net-kjøretidsmotoren velger riktig behandler for å betjene en innkommende forespørsel basert på filtypen til forespørselens URL. Tvert imot, en HttpModule er en komponent som er en del av ASP.Net-prosesseringsrørledningen og kalles på hver forespørsel som blir gjort til søknaden din. Merk at det grunnleggende målet for både HTTPhandlers og HttpModules er å injisere førbehandlingslogikk til rørledningen.

Anta at applikasjonen din må vise bilder av forskjellige størrelser - du kan dra nytte av en tilpasset HTTP-håndterer for å endre størrelsen på bildene og sende svaret tilbake. Et annet scenario der du kanskje vil bruke en tilpasset HTTP-håndterer, er når du ønsker å utføre noen forhåndsbehandlingslogikk i applikasjonen din basert på utvidelsene. Selv om du kan gjøre nesten alt du kan gjøre med HTTPhandler også med din ASP.Net-side, er HTTPhandlers mye mer bærbare og gjenbrukbare enn websidene dine.

Når en forespørsel om en ressurs kommer til ASP.Net Engine, starter ASP.Net Worker-prosessen i sin tur den aktuelle HTTP-håndtereren for å servere forespørselen basert på utvidelsen. En HTTPhandler i ASP.Net er en klasse som implementerer IHTTPhandler-grensesnittet. For øvrig er IHTTPhandler-grensesnittet tilgjengelig i System.Web-navneområdet. Vær oppmerksom på at PageHandlerFactory implementerer IHTTPhandlerFactory-grensesnittet og inneholder en metode som heter GetHandler, som igjen er ansvarlig for å returnere riktig behandler til serveren den spesifikke forespørselen.

MSDN sier: "En ASP.Net HTTP-behandler er prosessen (ofte referert til som" endepunkt ") som kjører som svar på en forespørsel til en ASP.Net-webapplikasjon. Den vanligste behandleren er en ASP.Net-sidebehandler som behandler .aspx-filer. Når brukere ber om en .aspx-fil, blir forespørselen behandlet av siden via sidebehandleren. "

Opprette en tilpasset HTTP-behandler

I denne delen vil vi undersøke hvordan vi kan bygge en tilpasset HTTP-håndterer i ASP.Net. For å bygge en tilpasset HTTPhandler, opprett en klasse som implementerer IHTTPhandler som vist i kodebiten nedenfor.

navneområdet CustomHTTP-håndterer

{

offentlig klasse CustomHTTP-håndterer: IHTTP-håndterer

   {

public bool IsReusable

       {

få {returner falsk; }

       }

offentlig ugyldig ProcessRequest (HttpContext context)

       {

kaste nye NotImplementedException ();

       }

   }

}

Merk at din egendefinerte HTTP-behandler skal ha en egenskap som heter IsReusable og en metode som heter ProcessRequest. Mens førstnevnte brukes til å spesifisere om behandleren kan brukes på nytt, er sistnevnte en metode som gjør den faktiske behandlingen for deg. I hovedsak bør enhver tilpasset HTTPHandler implementere IHttphandler-grensesnittet og definere disse to medlemmene.

Registrering av handler

Kartleggingsinformasjonen for HTTPhandlers er tilgjengelig i konfigurasjonsfilene. Slik kan en del av filen machine.config se ut.

Nå må du også fortelle kjøretiden når din egendefinerte HTTP-håndterer skal påkalles. Hvor skal du spesifisere dette? Vel kan spesifisere slike detaljer i web.config-filen. Du kan legge til og fjerne HTTP-behandlere ved hjelp av konfigurasjonsdelen i applikasjonskonfigurasjonsfilen. Slik kan du registrere behandleren din i programmets web.config-fil.

  

Så hva gjorde vi her? Vi registrerte nettopp behandleren vår og spesifiserte at hvis forespørsel om utvidelse av .idgaspx kommer, skal den forespurte sendes til den tilpassede Http Handler kalt CustomHTTPhandler.

Merk at i motsetning til .aspx-nettsider, har HTTP-håndtererne ikke visuelle elementer. Du kan opprette HTTP-behandlerne i et tilpasset bibliotek og deretter bruke dem når og når de er nødvendige.

Asynkrone HTTPHandlers

De nyere versjonene av ASP.Net gir støtte for asynkrone Http-håndterere. Du kan dra nytte av async / wait og TPL for å bygge asynkrone HTTPhandlers i ASP.Net. For å opprette en egendefinert asynkron HTTP-håndterer, bør du arve HttpTaskAsyncHandler-klassen. HttpTaskAsyncHandler-abstraktklassen implementerer i sin tur grensesnittene IHttpAsyncHandler og IHTTPhandler. Følgende kodebit illustrerer hvordan vår tilpassede asynkrone HTTP-håndterer ser ut ved første øyekast.

offentlig klasse CustomHTTP-håndterer: HttpTaskAsyncHandler

   {

public override Task ProcessRequestAsync (HttpContext context)

       {

kaste nye NotImplementedException ();

       }

   }

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