Moduli HTTP e gestori HTTP ASP.NET
Questo articolo presenta i moduli HTTP (Hypertext Transfer Protocol) ASP.NET e i gestori HTTP.
Versione originale del prodotto: ASP.NET
Numero KB originale: 307985
Riepilogo
I moduli HTTP e i gestori HTTP sono parte integrante dell'architettura di ASP.NET. Durante l'elaborazione di una richiesta, questa viene elaborata da più moduli HTTP (ad esempio, il modulo di autenticazione e il modulo di sessione) e viene quindi elaborata da un singolo gestore HTTP. Dopo che il gestore ha elaborato la richiesta, questa passa nuovamente attraverso i moduli HTTP.
Panoramica dei moduli HTTP
I moduli vengono chiamati prima e dopo l'esecuzione del gestore. I moduli consentono agli sviluppatori di intercettare, partecipare o modificare ogni singola richiesta. I moduli implementano l'interfaccia IHttpModule
, che si trova nello spazio dei System.Web
nomi .
Eventi disponibili che i moduli HTTP possono sincronizzare con
Una HttpApplication
classe fornisce una serie di eventi con cui i moduli possono eseguire la sincronizzazione. Gli eventi seguenti sono disponibili per la sincronizzazione dei moduli con in ogni richiesta. Questi eventi sono elencati in ordine sequenziale:
BeginRequest
: richiesta avviata. Se è necessario eseguire un'operazione all'inizio di una richiesta (ad esempio, visualizzare banner pubblicitari nella parte superiore di ogni pagina), sincronizzare questo evento.AuthenticateRequest
: se si vuole collegare uno schema di autenticazione personalizzato (ad esempio, cercare un utente in un database per convalidare la password), compilare un modulo che sincronizza questo evento e autentica l'utente come si vuole.AuthorizeRequest
: questo evento viene usato internamente per implementare meccanismi di autorizzazione, ad esempio per archiviare gli elenchi di controllo di accesso (ACL) in un database anziché nel file system. Anche se è possibile eseguire l'override di questo evento, non esistono molti motivi validi per farlo.ResolveRequestCache
: questo evento determina se una pagina può essere servita dalla cache di output. Se si vuole scrivere un modulo di memorizzazione nella cache personalizzato( ad esempio, creare una cache basata su file anziché una cache di memoria), sincronizzare questo evento per determinare se gestire la pagina dalla cache.AcquireRequestState
: lo stato della sessione viene recuperato dall'archivio stati. Se si vuole creare un modulo di gestione dello stato personalizzato, sincronizzare questo evento per acquisire lo stato della sessione dall'archivio stati.PreRequestHandlerExecute
: questo evento si verifica prima dell'esecuzione del gestore HTTP.PostRequestHandlerExecute
: questo evento si verifica dopo l'esecuzione del gestore HTTP.ReleaseRequestState
: lo stato della sessione viene archiviato nuovamente nell'archivio stati. Se si sta creando un modulo di stato sessione personalizzato, è necessario archiviare di nuovo lo stato nell'archivio stati.UpdateRequestCache
: questo evento scrive di nuovo l'output nella cache di output. Se si compila un modulo di cache personalizzato, si scrive nuovamente l'output nella cache.EndRequest
: richiesta completata. È possibile creare un modulo di debug che raccoglie informazioni in tutta la richiesta e quindi scrive le informazioni nella pagina.
Gli eventi seguenti sono disponibili per la sincronizzazione dei moduli con per ogni trasmissione di richieste. L'ordine di questi eventi non è deterministico.
PreSendRequestHeaders
: questo evento si verifica prima dell'invio delle intestazioni. Se si desidera aggiungere altre intestazioni, è possibile sincronizzare questo evento da un modulo personalizzato.PreSendRequestContent
: questo evento si verifica quando viene chiamato ilResponse.Flush
metodo . Se si vuole aggiungere contenuto aggiuntivo, è possibile sincronizzare questo evento da un modulo personalizzato.Error
: questo evento si verifica quando si verifica un'eccezione non gestita. Se si vuole scrivere un modulo del gestore degli errori personalizzato, sincronizzare questo evento.
Configurare i moduli HTTP
Il <httpModules>
gestore della sezione di configurazione è responsabile della configurazione dei moduli HTTP all'interno di un'applicazione. Può essere dichiarata a livello di computer, sito o applicazione. Usare la sintassi seguente per il <httpModules>
gestore di sezioni:
<httpModules>
<add type="[COM+ Class], [Assembly]" name="[ModuleName]" />
<remove type="[COM+ Class], [Assembly]" name="[ModuleName]" />
<clear />
</httpModules>
Creare moduli HTTP
Per creare un modulo HTTP, è necessario implementare l'interfaccia IHttpModule
. L'interfaccia IHttpModule
ha due metodi con le firme seguenti:
void Init(HttpApplication);
void Dispose();
Panoramica dei gestori HTTP
I gestori vengono usati per elaborare singole richieste di endpoint. I gestori consentono al framework di ASP.NET di elaborare singoli URL HTTP o gruppi di estensioni URL all'interno di un'applicazione. A differenza dei moduli, viene usato un solo gestore per elaborare una richiesta. Tutti i gestori implementano l'interfaccia IHttpHandler
, che si trova in System.Web namespace
. I gestori sono analoghi alle estensioni ISAPI (Internet Server Application Programming Interface).
Configurare i gestori HTTP
Il <httpHandlers>
gestore della sezione di configurazione è responsabile del mapping degli URL in ingresso alla IHttpHandler
classe o IHttpHandlerFactory
. Può essere dichiarata a livello di computer, sito o applicazione. Le sottodirectory ereditano queste impostazioni.
Gli amministratori usano la <add>
direttiva tag per configurare la <httpHandlers>
sezione . <Add>
le direttive vengono interpretate ed elaborate in ordine sequenziale dall'alto verso il basso. Usare la sintassi seguente per il <httpHandler>
gestore di sezioni:
<httpHandlers>
<add verb="[verb list]" path="[path/wildcard]" type="[COM+ Class], [Assembly]" validate="[true/false]" />
<remove verb="[verb list]" path="[path/wildcard]" />
<clear />
</httpHandlers>
Creare gestori HTTP
Per creare un gestore HTTP, è necessario implementare l'interfaccia IHttpHandler
. L'interfaccia IHttpHandler
ha un metodo e una proprietà con le firme seguenti:
void ProcessRequest(HttpContext);
bool IsReusable {get;}
Note
Se lo stato della sessione è necessario nel gestore HTTP, è necessario implementare anche l'interfaccia IRequiresSessionState
.