HTTP-modules en HTTP-handlers ASP.NET
In dit artikel worden de modules ASP.NET Hypertext Transfer Protocol (HTTP) en HTTP-handlers geïntroduceerd.
Oorspronkelijke productversie: ASP.NET
Oorspronkelijk KB-nummer: 307985
Samenvatting
HTTP-modules en HTTP-handlers vormen een integraal onderdeel van de ASP.NET-architectuur. Terwijl een aanvraag wordt verwerkt, wordt elke aanvraag verwerkt door meerdere HTTP-modules (bijvoorbeeld de verificatiemodule en de sessiemodule) en vervolgens verwerkt door één HTTP-handler. Nadat de handler de aanvraag heeft verwerkt, loopt de aanvraag terug via de HTTP-modules.
Overzicht van HTTP-modules
Modules worden aangeroepen voor en nadat de handler wordt uitgevoerd. Met modules kunnen ontwikkelaars elke afzonderlijke aanvraag onderscheppen, eraan deelnemen of wijzigen. Modules implementeren de IHttpModule
interface, die zich in de System.Web
naamruimte bevindt.
Beschikbare gebeurtenissen waarmee HTTP-modules kunnen synchroniseren
Een HttpApplication
klasse biedt een aantal gebeurtenissen waarmee modules kunnen worden gesynchroniseerd. De volgende gebeurtenissen zijn beschikbaar voor modules waarmee u op elke aanvraag kunt synchroniseren. Deze gebeurtenissen worden in opeenvolgende volgorde weergegeven:
BeginRequest
: Aanvraag is gestart. Als u iets moet doen aan het begin van een aanvraag (bijvoorbeeld advertentiebanners boven aan elke pagina weergeven), synchroniseert u deze gebeurtenis.AuthenticateRequest
: Als u uw eigen aangepaste verificatieschema wilt toevoegen (bijvoorbeeld een gebruiker opzoeken op basis van een database om het wachtwoord te valideren), maakt u een module die deze gebeurtenis synchroniseert en de gebruiker verifieert hoe u dat wilt.AuthorizeRequest
: deze gebeurtenis wordt intern gebruikt om autorisatiemechanismen te implementeren (bijvoorbeeld om uw toegangsbeheerlijsten (ACL's) op te slaan in een database in plaats van in het bestandssysteem. Hoewel u deze gebeurtenis kunt overschrijven, zijn er niet veel goede redenen om dit te doen.ResolveRequestCache
: Met deze gebeurtenis wordt bepaald of een pagina kan worden geleverd vanuit de uitvoercache. Als u uw eigen cachemodule wilt schrijven (bijvoorbeeld een op bestanden gebaseerde cache bouwen in plaats van een geheugencache), synchroniseert u deze gebeurtenis om te bepalen of de pagina uit de cache moet worden gebruikt.AcquireRequestState
: Sessiestatus wordt opgehaald uit het statusarchief. Als u uw eigen statusbeheermodule wilt bouwen, synchroniseert u deze gebeurtenis om de sessiestatus uit uw statusarchief te halen.PreRequestHandlerExecute
: Deze gebeurtenis vindt plaats voordat de HTTP-handler wordt uitgevoerd.PostRequestHandlerExecute
: Deze gebeurtenis vindt plaats nadat de HTTP-handler is uitgevoerd.ReleaseRequestState
: Sessiestatus wordt weer opgeslagen in het statusarchief. Als u een aangepaste module voor sessiestatus bouwt, moet u de status weer opslaan in uw statusarchief.UpdateRequestCache
: Met deze gebeurtenis wordt uitvoer teruggeschreven naar de uitvoercache. Als u een aangepaste cachemodule bouwt, schrijft u de uitvoer terug naar uw cache.EndRequest
: De aanvraag is voltooid. U kunt een foutopsporingsmodule bouwen die informatie verzamelt tijdens de aanvraag en vervolgens de informatie naar de pagina schrijft.
De volgende gebeurtenissen zijn beschikbaar voor modules om mee te synchroniseren voor elke verzending van aanvragen. De volgorde van deze gebeurtenissen is niet-deterministisch.
PreSendRequestHeaders
: Deze gebeurtenis vindt plaats voordat de headers worden verzonden. Als u extra headers wilt toevoegen, kunt u deze gebeurtenis vanuit een aangepaste module synchroniseren.PreSendRequestContent
: Deze gebeurtenis treedt op wanneer deResponse.Flush
methode wordt aangeroepen. Als u extra inhoud wilt toevoegen, kunt u deze gebeurtenis synchroniseren vanuit een aangepaste module.Error
: Deze gebeurtenis treedt op wanneer er een niet-verwerkte uitzondering optreedt. Als u een aangepaste fouthandlermodule wilt schrijven, synchroniseert u deze gebeurtenis.
HTTP-modules configureren
De <httpModules>
handler voor configuratiesecties is verantwoordelijk voor het configureren van de HTTP-modules in een toepassing. Deze kan worden gedeclareerd op computer-, site- of toepassingsniveau. Gebruik de volgende syntaxis voor de <httpModules>
sectie-handler:
<httpModules>
<add type="[COM+ Class], [Assembly]" name="[ModuleName]" />
<remove type="[COM+ Class], [Assembly]" name="[ModuleName]" />
<clear />
</httpModules>
HTTP-modules maken
Als u een HTTP-module wilt maken, moet u de IHttpModule
interface implementeren. De IHttpModule
interface heeft twee methoden met de volgende handtekeningen:
void Init(HttpApplication);
void Dispose();
Overzicht van HTTP-handlers
Handlers worden gebruikt voor het verwerken van afzonderlijke eindpuntaanvragen. Handlers maken het ASP.NET framework mogelijk om afzonderlijke HTTP-URL's of groepen URL-extensies binnen een toepassing te verwerken. In tegenstelling tot modules wordt slechts één handler gebruikt om een aanvraag te verwerken. Alle handlers implementeren de IHttpHandler
interface, die zich in de System.Web namespace
. Handlers zijn vergelijkbaar met ISAPI-extensies (Internet Server Application Programming Interface).
HTTP-handlers configureren
De handler voor configuratiesecties is verantwoordelijk voor het <httpHandlers>
toewijzen van binnenkomende URL's aan de IHttpHandler
of IHttpHandlerFactory
klasse. Deze kan worden gedeclareerd op computer-, site- of toepassingsniveau. Submappen nemen deze instellingen over.
Beheerders gebruiken de <add>
tag-instructie om de <httpHandlers>
sectie te configureren. <Add>
instructies worden geïnterpreteerd en verwerkt in een opeenvolgende volgorde van bovenaf. Gebruik de volgende syntaxis voor de <httpHandler>
sectie-handler:
<httpHandlers>
<add verb="[verb list]" path="[path/wildcard]" type="[COM+ Class], [Assembly]" validate="[true/false]" />
<remove verb="[verb list]" path="[path/wildcard]" />
<clear />
</httpHandlers>
HTTP-handlers maken
Als u een HTTP-handler wilt maken, moet u de IHttpHandler
interface implementeren. De IHttpHandler
interface heeft één methode en één eigenschap met de volgende handtekeningen:
void ProcessRequest(HttpContext);
bool IsReusable {get;}
Notitie
Als de sessiestatus vereist is in uw HTTP-handler, moet u ook de IRequiresSessionState
interface implementeren.