Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 20191|Svar: 0

[ASP.NET] Asp.Net IHttpHandler introducerad

[Kopiera länk]
Publicerad på 2018-03-13 21:40:17 | | | |
Asp.Net IHttpHandler introducerad
ASP.NET två vanliga bearbetningsgränssnitten vid svar på Http-förfrågningar är IHttpHandler och IHttpModule.

Generellt används IHttpHandler för att hantera en specifik typ av förfrågan, såsom separat bearbetning av varje *.asp, *.aspx fil. IHttpModule används vanligtvis för att hantera operationer som ofta krävs för förfrågan, såsom att utföra några av samma kontroller på förfrågningssidan.

Låt oss titta på processstegen för IIS-servern när man gör motsvarande HTTP-förfrågan. ASP.NET har begreppet pipeline, vilket innebär att varje ASP.NET förfrågan har en serie motsvarande operationer i IIS för att bilda en linjeliknande sekvens.

ASP.NET pipelineintroduktion

Låt oss titta på bearbetningstidsdiagrammet för pipelinen:




Som kan ses i figuren, efter att förfrågan anländer, behandlas implementationen av HttpModule och sedan anropas ProcessRequest()-metoden i HttpHandler för att göra det specifika svaret. Därför är det inte svårt att förstå varför hanteringen av klassspecifika förfrågningar placeras i HttpHandler-klassen när vissa kontroller görs som är gemensamma för alla förfrågningar i HttpModule.

Kodpraxis
IHttpHandler

Författaren stötte nyligen på användningen av IHttpHandler för att hantera klientgränssnittsanrop i projektet, så låt oss kort diskutera den enkla gränssnittsdesignen baserad på IHttpHandler.

IHttpHandler-gränssnittet har endast två medlemmar:


Attributet IsReusable identifierar om HttpHandler-objektet kan användas av andra instanser, och vi sätter det vanligtvis till True. ProcessRequest()-metoden är ett specifikt svar på förfrågan, och vi behöver bara lägga in den specifika affärslogikoperationen här.

Först, skapa ett nytt webbprojekt och lägg till en Handler-klass:

RayHandler-klassen implementerar ProcessRequest()-funktionen i IHttpHandler-gränssnittet, som bara är en direkt utdata av en textbit.

Sedan behöver vi lägga till följande konfiguration i Web.config-filen:


path indikerar URL-matchning, såsom *.ray, vilket betyder att Handlern svarar på URL-förfrågningar som slutar på ".ray", verb anger förfrågningsmetoden, såsom Get/Post, och * betyder att den matchar alla. typ anger typen av Handler-klass, WebApplication2. RayHandler är klassnamnet, WebApplication2 syftar på namnet på assembleren i Bin-katalogen, till exempel är assemblernamnet i exemplet WebApplication2.dll, och det finns inget behov av att definiera ett suffixnamn här.

Starta sidan, ange URL:en som slutar på ".ray", och du kan se följande resultat:



Översikt över IHttpHandlerFactory

Ibland kan vi behöva hantera flera olika suffix, ett suffix som motsvarar en Handler-klass, och så här ser vår Web.config-fil ut:


Om vi har många HttpHandler-implementeringsklasser kommer vår Web.config-filkonfiguration garanterat att se utförlig ut. Eller i vissa fall, när vi bara kan avgöra vilken Handler som svarar när programmet körs, behöver vi använda IHttpHandlerFactory.

IHttpHandlerFactory definieras enligt följande:


Bland dem:

GetHandler(): Returnerar en instans som implementerar IHttpHandler-gränssnittet;
ReleaseHandler(): Gör det möjligt för Factory att återanvända en befintlig Handler-instans.
Ta ovanstående ray- och rss-förfrågningar som exempel, implementera Factory-klassen:

I detta fall är konfigurationen i Web.config följande:


Vid denna tidpunkt implementeras funktionen att använda Factory-klassen för att motsvara olika specifika hanterare, vilket förenklar konfigurationen.

Skalbar IHttpHandlerFactory

I ovanstående implementation, om programmet behöver lägga till en ny suffixhanteringsmetod i framtiden, måste det ändra Switch-satsen i GetHandler(), vilket också kan orsaka fel eller medföra andra säkerhetsrisker. Så, är det möjligt att behålla HandlerFactory-klassen oförändrad för framtida tillägg?

Svaret är definitivt ja. Läsare som är bekanta med designmönstret bör förstå att detta är ett enkelt fabriksmönster, och för att uppnå de tidigare funktionerna kan vi använda designläget som kallas avancerade punkter.

Och här kan vi också använda språkfunktionen i C#-språket – reflektion. Genom reflektionsmekanismen i C# speglar vi motsvarande Hanlder-typ enligt URL:ens suffix, så länge vi är överens om korrespondensen mellan URL:ens suffixnamn och Handlerns klassnamn.

Till exempel skriver vi om GetHandler() enligt följande:

I det här fallet behöver du bara lägga Handler-klassen i metoden under samma namnrymd som HandlerFactory-klassen och konfigurera den korrekt i Web.config. Till exempel, om det finns en RayHandler-klass, bör följande konfiguration läggas till för att automatiskt matcha:



sammanfattning
Denna artikel introducerar kort användningen av IHttpHandler i ASP.NET, tillhandahåller implementeringen av IHttpHandlerFactory vid bearbetning av flera Handler-förfrågningar och förbättrar slutligen en skalbar multi-request Handler-implementation med hjälp av reflektionsmekanismen i C#.





Föregående:asp.net Förklarande betydelse av HttpContext
Nästa:asp.net IHttpModule-gränssnittet förklaras i detalj
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com