ASP.NET moduli HTTP e gestori HTTP

Questo articolo presenta i moduli HTTP (Hypertext Transfer Protocol) e i gestori HTTP ASP.NET.

Versione originale del prodotto: ASP.NET
Numero KB originale: 307985

Riepilogo

I moduli HTTP e i gestori HTTP sono parte integrante dell'architettura ASP.NET. Durante l'elaborazione di una richiesta, ogni richiesta 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, la richiesta scorre di nuovo 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 con cui i moduli HTTP possono eseguire la sincronizzazione

Una HttpApplication classe fornisce una serie di eventi con cui i moduli possono essere sincronizzati. Gli eventi seguenti sono disponibili per la sincronizzazione dei moduli in ogni richiesta. Questi eventi sono elencati in ordine sequenziale:

  • BeginRequest: la richiesta è stata 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 il proprio 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 ci sono molti buoni motivi 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, compilare 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 compila un modulo di stato sessione personalizzato, è necessario archiviare nuovamente 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 di nuovo l'output nella cache.

  • EndRequest: la richiesta è stata completata. È possibile compilare 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 per ogni trasmissione della richiesta. 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 il Response.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 dichiarato a livello di computer, sito o applicazione. Usare la sintassi seguente per il gestore della <httpModules> sezione:

<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 dispone di due metodi con le firme seguenti:

void Init(HttpApplication);
void Dispose();

Panoramica dei gestori HTTP

I gestori vengono usati per elaborare le singole richieste di endpoint. I gestori consentono al framework 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 dichiarato 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 gestore della <httpHandler> sezione:

<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;}

Nota

Se lo stato della sessione è necessario nel gestore HTTP, è anche necessario implementare l'interfaccia IRequiresSessionState .