Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 20191|Svar: 0

[ASP.NET] Asp.Net IHttpHandler introduceret

[Kopier link]
Opslået på 13/03/2018 21.40.17 | | | |
Asp.Net IHttpHandler introduceret
ASP.NET to almindeligt anvendte behandlingsgrænseflader ved besvarelse af HTTP-forespørgsler er IHttpHandler og IHttpModule.

Generelt bruges IHttpHandler til at håndtere en specifik type forespørgsel, såsom separat behandling af hver *.asp, *.aspx fil. IHttpModule bruges normalt til at håndtere operationer, der ofte kræves for forespørgslen, såsom at udføre nogle af de samme kontroller på anmodningssiden.

Lad os se på behandlingsprocesserne på IIS-serveren, når den tilsvarende HTTP-anmodning foretages. ASP.NET har begrebet pipeline, hvilket betyder, at hver ASP.NET anmodning vil have en række tilsvarende operationer i IIS for at danne en linjelignende sekvens.

ASP.NET Introduktion til rørledning

Lad os se på behandlingstidsdiagrammet for pipelinen:




Som det kan ses af figuren, behandles implementeringen af HttpModule, efter anmodningen ankommer, og derefter kaldes ProcessRequest()-metoden i HttpHandler for at give det specifikke svar. Derfor er det ikke svært at se, hvorfor håndteringen af klassespecifikke forespørgsler placeres i HttpHandler-klassen, mens der udføres nogle kontroller, der er fælles for alle forespørgsler i HttpModulet.

Kodepraksis
IHttpHandler

Forfatteren stødte for nylig på brugen af IHttpHandler til at håndtere klientgrænsefladekald i projektet, så lad os kort diskutere det simple interfacedesign baseret på IHttpHandler.

IHttpHandler-grænsefladen har kun to medlemmer:


Attributten IsReusable identificerer, om HttpHandler-objektet kan bruges af andre instanser, og vi sætter det som regel til True. ProcessRequest()-metoden er et specifikt svar på forespørgslen, og vi behøver kun at placere den specifikke forretningslogikoperation her.

Først opretter du et nyt webprojekt og tilføjer en Handler-klasse:

RayHandler-klassen implementerer ProcessRequest()-funktionen i IHttpHandler-interfacet, som blot er et direkte output af et stykke tekst.

Derefter skal vi tilføje følgende konfiguration i Web.config-filen:


path angiver URL-match, såsom *.ray, hvilket betyder, at Handleren vil svare på URL-anmodninger, der ender på ".ray", verbet angiver anmodningsmetoden, såsom Get/Post, og * betyder, at det matcher alle. type angiver typen af Handler-klassen, WebApplication2.RayHandler er klassenavnet, WebApplication2 refererer til navnet på samlingen i Bin-kataloget, for eksempel er samlingsnavnet i eksemplet WebApplication2.dll, og der er ikke behov for at definere et suffiksnavn her.

Start siden, indtast URL'en, der ender på ".ray", og du kan se følgende resultat:



IHttpHandlerFactory Oversigt

Nogle gange kan vi være nødt til at håndtere flere forskellige suffikser, hvoraf ét suffiks svarer til en Handler-klasse, og sådan ser vores Web.config-fil ud:


Hvis vi har mange HttpHandler-implementeringsklasser, så vil vores Web.config-filkonfiguration nødvendigvis se ordrig ud. Eller i nogle tilfælde, hvor vi kun kan afgøre, hvilken Handler der reagerer, når programmet kører, skal vi bruge IHttpHandlerFactory.

IHttpHandlerFactory defineres som følger:


Blandt dem:

GetHandler(): Returnerer en instans, der implementerer IHttpHandler-grænsefladen;
ReleaseHandler(): Gør det muligt for Factory at genbruge en eksisterende Handler-instans.
Tag ovenstående ray- og rss-anmodninger som eksempel, implementer Factory-klassen:

I dette tilfælde er konfigurationen i Web.config som følger:


På dette tidspunkt implementeres funktionen med at bruge Factory-klassen til at svare til forskellige specifikke handlere, hvilket forenkler konfigurationen.

Skalerbar IHttpHandlerFactory

I ovenstående implementering, hvis programmet i fremtiden skal tilføje en ny metode til håndtering af suffikser, skal det ændre Switch-sætningen i GetHandler(), hvilket også kan forårsage fejl eller medføre andre sikkerhedsrisici. Så er det muligt at beholde HandlerFactory-klassen uændret til senere udvidelser?

Svaret er helt klart ja. Læsere, der er bekendt med designmønsteret, bør forstå, at dette er et simpelt fabriksmønster, og for at opnå de tidligere funktioner kan vi bruge designmetoden kaldet avancerede punkter.

Og her kan vi også bruge sprogfunktionen i C#-sproget – reflection. Gennem refleksionsmekanismen i C# afspejler vi den tilsvarende Hanlder-type i henhold til URL'ens suffiks, så længe vi er enige om overensstemmelsen mellem URL'ens suffiksnavn og Handlerens klassenavn.

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

I dette tilfælde behøver du kun at placere Handler-klassen i metoden under samme navnerum som HandlerFactory-klassen og konfigurere den korrekt i Web.config. For eksempel, hvis der findes en RayHandler-klasse, bør følgende konfiguration tilføjes for automatisk at matche:



resumé
Denne artikel introducerer kort brugen af IHttpHandler i ASP.NET, giver implementeringen af IHttpHandlerFactory i behandlingen af flere Handler-anmodninger og forbedrer endelig en skalerbar multi-request Handler-implementering ved hjælp af refleksionsmekanismen i C#.





Tidligere:asp.net Forklarende betydning af HttpContext
Næste:asp.net IHttpModule-interface forklares i detaljer
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com