Dela via


ASP.NET HTTP-moduler och HTTP-hanterare

Den här artikeln innehåller modulerna ASP.NET Hypertext Transfer Protocol (HTTP) och HTTP-hanterare.

Ursprunglig produktversion: ASP.NET
Ursprungligt KB-nummer: 307985

Sammanfattning

HTTP-moduler och HTTP-hanterare är en integrerad del av ASP.NET arkitekturen. Medan en begäran bearbetas bearbetas varje begäran av flera HTTP-moduler (till exempel autentiseringsmodulen och sessionsmodulen) och bearbetas sedan av en enda HTTP-hanterare. När hanteraren har bearbetat begäran flödar begäran tillbaka via HTTP-modulerna.

Översikt över HTTP-moduler

Moduler anropas före och efter att hanteraren har körts. Moduler gör det möjligt för utvecklare att fånga upp, delta i eller ändra varje enskild begäran. Moduler implementerar IHttpModule gränssnittet som finns i System.Web namnområdet.

Tillgängliga händelser som HTTP-moduler kan synkronisera med

En HttpApplication klass innehåller ett antal händelser som moduler kan synkronisera med. Följande händelser är tillgängliga för moduler att synkronisera med för varje begäran. Dessa händelser visas i sekventiell ordning:

  • BeginRequest: Begäran har startats. Om du behöver göra något i början av en begäran (till exempel visa annonsbanderoller överst på varje sida) synkroniserar du den här händelsen.

  • AuthenticateRequest: Om du vill ansluta ditt eget anpassade autentiseringsschema (till exempel söka upp en användare mot en databas för att verifiera lösenordet) skapar du en modul som synkroniserar den här händelsen och autentiserar användaren hur du vill.

  • AuthorizeRequest: Den här händelsen används internt för att implementera auktoriseringsmekanismer (till exempel för att lagra dina åtkomstkontrollistor (ACL) i en databas i stället för i filsystemet). Även om du kan åsidosätta den här händelsen finns det inte många bra skäl att göra det.

  • ResolveRequestCache: Den här händelsen avgör om en sida kan hanteras från utdatacachen. Om du vill skriva en egen cachelagringsmodul (till exempel skapa en filbaserad cache i stället för ett minnescachen) synkroniserar du den här händelsen för att avgöra om sidan ska betjänas från cacheminnet.

  • AcquireRequestState: Sessionstillståndet hämtas från tillståndsarkivet. Om du vill skapa en egen tillståndshanteringsmodul synkroniserar du den här händelsen för att hämta sessionstillståndet från tillståndsarkivet.

  • PreRequestHandlerExecute: Den här händelsen inträffar innan HTTP-hanteraren körs.

  • PostRequestHandlerExecute: Den här händelsen inträffar när HTTP-hanteraren har körts.

  • ReleaseRequestState: Sessionstillståndet lagras i tillståndsarkivet igen. Om du skapar en modul för anpassat sessionstillstånd måste du lagra tillståndet i tillståndsarkivet igen.

  • UpdateRequestCache: Den här händelsen skriver utdata tillbaka till utdatacachen. Om du skapar en anpassad cachemodul skriver du tillbaka utdata till cacheminnet.

  • EndRequest: Begäran har slutförts. Du kanske vill skapa en felsökningsmodul som samlar in information i hela begäran och sedan skriver informationen till sidan.

Följande händelser är tillgängliga för moduler att synkronisera med för varje överföring av begäranden. Ordningen på dessa händelser är icke-deterministisk.

  • PreSendRequestHeaders: Den här händelsen inträffar innan rubrikerna skickas. Om du vill lägga till ytterligare rubriker kan du synkronisera den här händelsen från en anpassad modul.

  • PreSendRequestContent: Den här händelsen inträffar när Response.Flush metoden anropas. Om du vill lägga till ytterligare innehåll kan du synkronisera den här händelsen från en anpassad modul.

  • Error: Den här händelsen inträffar när ett ohanterat undantag inträffar. Om du vill skriva en anpassad felhanterarmodul synkroniserar du den här händelsen.

Konfigurera HTTP-moduler

Konfigurationsavsnittshanteraren <httpModules> ansvarar för att konfigurera HTTP-modulerna i ett program. Den kan deklareras på dator-, plats- eller programnivå. Använd följande syntax för avsnittshanteraren <httpModules> :

<httpModules>
    <add type="[COM+ Class], [Assembly]" name="[ModuleName]" />
    <remove type="[COM+ Class], [Assembly]" name="[ModuleName]" />
    <clear />
</httpModules>

Skapa HTTP-moduler

Om du vill skapa en HTTP-modul måste du implementera IHttpModule gränssnittet. Gränssnittet IHttpModule har två metoder med följande signaturer:

void Init(HttpApplication);
void Dispose();

Översikt över HTTP-hanterare

Hanterare används för att bearbeta enskilda slutpunktsbegäranden. Hanterare gör det möjligt för ASP.NET-ramverket att bearbeta enskilda HTTP-URL:er eller grupper av URL-tillägg i ett program. Till skillnad från moduler används endast en hanterare för att bearbeta en begäran. Alla hanterare implementerar IHttpHandler gränssnittet, som finns i System.Web namespace. Hanterare är analoga med ISAPI-tillägg (Internet Server Application Programming Interface).

Konfigurera HTTP-hanterare

Konfigurationsavsnittshanteraren <httpHandlers> ansvarar för att mappa inkommande URL:er till IHttpHandler klassen eller IHttpHandlerFactory . Den kan deklareras på dator-, plats- eller programnivå. Underkataloger ärver dessa inställningar.

Administratörer använder <add> taggdirektivet för att konfigurera avsnittet <httpHandlers> . <Add> direktiv tolkas och bearbetas i sekventiell ordning uppifrån och ned. Använd följande syntax för avsnittshanteraren <httpHandler> :

<httpHandlers>
    <add verb="[verb list]" path="[path/wildcard]" type="[COM+ Class], [Assembly]" validate="[true/false]" />
    <remove verb="[verb list]" path="[path/wildcard]" />
    <clear />
</httpHandlers>

Skapa HTTP-hanterare

Om du vill skapa en HTTP-hanterare måste du implementera IHttpHandler gränssnittet. Gränssnittet IHttpHandler har en metod och en egenskap med följande signaturer:

void ProcessRequest(HttpContext);
bool IsReusable {get;}

Kommentar

Om sessionstillstånd krävs i HTTP-hanteraren måste du också implementera IRequiresSessionState gränssnittet.