Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 20191|Svare: 0

[ASP.NET] Asp.Net IHttpHandler introdusert

[Kopier lenke]
Publisert på 13.03.2018 21:40:17 | | | |
Asp.Net IHttpHandler introdusert
ASP.NET to ofte brukte behandlingsgrensesnittene når man svarer på Http-forespørsler er IHttpHandler og IHttpModule.

Generelt brukes IHttpHandler til å håndtere en spesifikk type forespørsel, som for eksempel separat behandling av hver *.asp, *.aspx fil. IHttpModule brukes vanligvis til å håndtere operasjoner som vanligvis kreves for forespørselen, som å utføre noen av de samme sjekkene på forespørselssiden.

La oss se på behandlingstrinnene til IIS-serveren når den tilhørende HTTP-forespørselen forestår. ASP.NET har konseptet pipeline, som betyr at hver ASP.NET forespørsel vil ha en serie tilsvarende operasjoner i IIS for å danne en linjelignende sekvens.

ASP.NET Pipeline-introduksjon

La oss se på behandlingstidsdiagrammet for rørledningen:




Som det fremgår av figuren, etter at forespørselen har ankommet, behandles implementasjonen av HttpModule, og deretter kalles ProcessRequest()-metoden i HttpHandler for å gi det spesifikke svaret. Derfor er det ikke vanskelig å se hvorfor håndteringen av klasse-spesifikke forespørsler plasseres i HttpHandler-klassen når man gjør noen sjekker som er felles for alle forespørsler i HttpModule.

Kodepraksis
IHttpHandler

Forfatteren kom nylig over bruken av IHttpHandler for å håndtere klientgrensesnittkall i prosjektet, så la oss kort diskutere det enkle grensesnittdesignet basert på IHttpHandler.

IHttpHandler-grensesnittet har kun to medlemmer:


IsReusable-attributtet identifiserer om HttpHandler-objektet kan brukes av andre instanser, og vi setter det vanligvis til True. ProcessRequest()-metoden er et spesifikt svar på forespørselen, og vi trenger bare å plassere den spesifikke forretningslogikkoperasjonen her.

Først, opprett et nytt webprosjekt og legg til en Handler-klasse:

RayHandler-klassen implementerer ProcessRequest()-funksjonen i IHttpHandler-grensesnittet, som bare er en direkte utdata av et tekststykke.

Deretter må vi legge til følgende konfigurasjon i Web.config-filen:


path indikerer URL-matching, som *.ray, som betyr at Handleren vil svare på URL-forespørsler som ender på ".ray", verb angir forespørselsmetoden, som Get/Post, og * betyr at det matcher alle. type angir typen Handler-klasse, WebApplication2.RayHandler er klassenavnet, WebApplication2 refererer til navnet på samlingen i Bin-katalogen, for eksempel er assemblernavnet i eksempelet WebApplication2.dll, og det er ikke nødvendig å definere et suffiksnavn her.

Start siden, skriv inn URL-en som ender på ".ray", og du kan se følgende resultat:



Oversikt over IHttpHandlerFactory

Noen ganger må vi håndtere flere forskjellige suffikser, ett suffiks tilsvarer en Handler-klasse, og slik ser Web.config-filen vår ut:


Hvis vi har mange HttpHandler-implementeringsklasser, vil Web.config-filkonfigurasjonen vår nødvendigvis se ordrik ut. Eller i noen tilfeller, når vi bare kan avgjøre hvilken Handler som svarer når programmet kjører, må vi bruke IHttpHandlerFactory.

IHttpHandlerFactory er definert som følger:


Blant dem:

GetHandler(): Returnerer en instans som implementerer IHttpHandler-grensesnittet;
ReleaseHandler(): Gjør det mulig for Factory å gjenbruke en eksisterende Handler-instans.
Ta de ovennevnte ray- og rss-forespørslene som eksempel, implementer Factory-klassen:

I dette tilfellet er konfigurasjonen i Web.config som følger:


På dette tidspunktet implementeres funksjonen med å bruke Factory-klassen for å tilsvare ulike spesifikke håndterere, noe som forenkler konfigurasjonen.

Skalerbar IHttpHandlerFactory

I den ovennevnte implementeringen, hvis programmet trenger å legge til en ny suffikshåndteringsmetode i fremtiden, må det endre Switch-setningen i GetHandler(), noe som også kan forårsake feil eller medføre andre sikkerhetsrisikoer. Så, er det mulig å beholde HandlerFactory-klassen uendret for senere utvidelser?

Svaret er definitivt ja. Lesere som er kjent med designmønsteret bør forstå at dette er et enkelt fabrikkmønster, og for å oppnå de tidligere funksjonene kan vi bruke designmodusen kalt avanserte punkter.

Og her kan vi også bruke språkfunksjonen til C#-språket – refleksjon. Gjennom refleksjonsmekanismen i C# reflekterer vi den tilsvarende Hanlder-typen i henhold til suffikset til URL-en, så lenge vi er enige om samsvaret mellom suffiksnavnet til URL-en og klassenavnet til Handleren.

For eksempel omskriver vi GetHandler() som følger:

I dette tilfellet trenger du bare å legge Handler-klassen i metoden under samme navnerom som HandlerFactory-klassen og konfigurere den korrekt i Web.config. For eksempel, hvis det finnes en RayHandler-klasse, bør følgende konfigurasjon legges til for automatisk å matche:



sammendrag
Denne artikkelen introduserer kort bruken av IHttpHandler i ASP.NET, gir implementering av IHttpHandlerFactory i behandling av flere Handler-forespørsler, og forbedrer til slutt en skalerbar multi-forespørsel Handler-implementering ved bruk av refleksjonsmekanismen i C#.





Foregående:asp.net Forklarende betydning av HttpContext
Neste:asp.net IHttpModule-grensesnittet forklares i detalj
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com