Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 20191|Antwoord: 0

[ASP.NET] Asp.Net IHttpHandler introduceerde

[Link kopiëren]
Geplaatst op 13-03-2018 21:40:17 | | | |
Asp.Net IHttpHandler introduceerde
ASP.NET twee veelgebruikte verwerkingsinterfaces bij het beantwoorden van HTTP-verzoeken zijn IHttpHandler en IHttpModule.

In het algemeen wordt IHttpHandler gebruikt om een specifiek type verzoek af te handelen, zoals de afzonderlijke verwerking van elk *.asp, *.aspx bestand. IHttpModule wordt meestal gebruikt om behandelingen af te handelen die vaak vereist zijn voor het verzoek, zoals het uitvoeren van enkele van dezelfde controles op de verzoekpagina.

Laten we eens kijken naar de verwerkingsstappen van de IIS-server bij het maken van het bijbehorende HTTP-verzoek. ASP.NET heeft het concept van pijplijn, wat betekent dat elk ASP.NET verzoek een reeks overeenkomstige bewerkingen in IIS zal hebben om een regelachtige reeks te vormen.

ASP.NET Pijpleiding Introductie

Laten we eens kijken naar het verwerkingstijdschema van de pijplijn:




Zoals te zien is uit de figuur, wordt na aankomst van het verzoek de implementatie verwerkt door HttpModule en vervolgens wordt de ProcessRequest()-methode van HttpHandler aangeroepen om het specifieke antwoord te geven. Daarom is het niet moeilijk te begrijpen waarom de afhandeling van klasse-specifieke verzoeken in de HttpHandler-klasse wordt geplaatst terwijl er enkele controles worden uitgevoerd die gemeenschappelijk zijn voor alle verzoeken in de HttpModule.

Codepraktijk
IHttpHandler

De auteur kwam onlangs het gebruik van IHttpHandler tegen om clientinterface-aanroepen in het project af te handelen, dus laten we kort het eenvoudige interfaceontwerp op basis van IHttpHandler bespreken.

De IHttpHandler-interface heeft slechts twee leden:


Het IsReusable-attribuut identificeert of het HttpHandler-object door andere instanties gebruikt kan worden, en we zetten het meestal op True. De ProcessRequest()-methode is een specifiek antwoord op het verzoek, en we hoeven hier alleen de specifieke bedrijfslogica-operatie te plaatsen.

Maak eerst een nieuw webproject aan en voeg een Handler-klasse toe:

De RayHandler-klasse implementeert de ProcessRequest()-functie van de IHttpHandler-interface, die gewoon een directe uitvoer van een tekststuk is.

Vervolgens moeten we de volgende configuratie toevoegen aan het Web.config-bestand:


path geeft URL-matching aan, zoals *.ray, wat betekent dat de Handler reageert op URL-verzoeken die eindigen op ".ray", verb de verzoekmethode aangeeft, zoals Get/Post, en * betekent dat het alle matcht. type geeft het type Handler-klasse aan, WebApplication2.RayHandler is de klassenaam, WebApplication2 verwijst naar de naam van de assembly in de Bin-directory, bijvoorbeeld is de assemblynaam in het voorbeeld WebApplication2.dll, en er is geen noodzaak om hier een achtervoegnaam te definiëren.

Start de site, voer de URL in die eindigt op ".ray", en je ziet het volgende resultaat:



Overzicht van IHttpHandlerFactory

Soms moeten we met meerdere verschillende achtervoegsels omgaan, waarvan één overeenkomt met een Handler-klasse, en zo ziet ons Web.config-bestand eruit:


Als we veel HttpHandler-implementatieklassen hebben, zal onze Web.config-bestandsconfiguratie er waarschijnlijk uitgebreid uitzien. Of in sommige gevallen, wanneer we alleen kunnen bepalen welke Handler reageert wanneer het programma draait, moeten we IHttpHandlerFactory gebruiken.

IHttpHandlerFactory wordt als volgt gedefinieerd:


Onder andere:

GetHandler(): Geeft een instantie terug die de IHttpHandler-interface implementeert;
ReleaseHandler(): Stelt Factory in staat een bestaande Handler-instantie te hergebruiken.
Neem de bovenstaande ray- en rss-verzoeken als voorbeeld, implementeer de Factory-klasse:

In dit geval is de configuratie in Web.config als volgt:


Op dit moment wordt de functie geïmplementeerd om de Factory-klasse te gebruiken om te corresponderen met verschillende specifieke handlers, wat de configuratie vereenvoudigt.

Schaalbare IHttpHandlerFactory

In bovenstaande implementatie, als het programma in de toekomst een nieuwe methode voor het afhandelen van achtervoegsels moet toevoegen, moet het de Switch-instructie in GetHandler() wijzigen, wat ook fouten kan veroorzaken of andere beveiligingsrisico's kan opleveren. Dus, is het mogelijk om de HandlerFactory-klasse ongewijzigd te houden voor latere uitbreidingen?

Het antwoord is zeker ja. Lezers die bekend zijn met het ontwerppatroon moeten begrijpen dat dit een eenvoudig fabriekspatroon is, en om de voorgaande functies te bereiken, kunnen we de ontwerpmodus gebruiken die geavanceerde punten wordt genoemd.

En hier kunnen we ook de taalfunctie van de C#-taal gebruiken - reflectie. Via het reflectiemechanisme van C# weerspiegelen we het overeenkomstige Hanlder-type volgens het achtervoegsel van de URL, zolang we het eens zijn over de overeenkomst tussen de achtervoegnaam van de URL en de klassenaam van de Handler.

We herschrijven bijvoorbeeld GetHandler() als volgt:

In dit geval hoef je alleen de Handler-klasse in de methode onder dezelfde naamruimte als de HandlerFactory-klasse te zetten en deze correct te configureren in Web.config. Als er bijvoorbeeld een RayHandler-klasse is, moet de volgende configuratie worden toegevoegd om automatisch te matchen:



samenvatting
Dit artikel introduceert kort het gebruik van IHttpHandler in ASP.NET, biedt de implementatie van IHttpHandlerFactory bij de verwerking van meerdere Handler-verzoeken, en verbetert tenslotte een schaalbare multi-request Handler-implementatie met behulp van het reflectiemechanisme van C#.





Vorig:asp.net Verklarende betekenis van HttpContext
Volgend:asp.net IHttpModule-interface wordt in detail uitgelegd
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com