Procedura dettagliata: creazione e registrazione di un modulo HTTP personalizzato
Aggiornamento: novembre 2007
In questa procedura dettagliata viene illustrata la funzionalità di base di un modulo HTTP personalizzato. Un modulo HTTP viene chiamato a ogni richiesta in risposta agli eventi BeginRequest e EndRequest. Di conseguenza, il modulo viene eseguito prima e dopo l'elaborazione di una richiesta.
Se l'applicazione ASP.NET viene eseguita in IIS 6.0, è possibile utilizzare i moduli HTTP per personalizzare le richieste per risorse gestite da ASP.NET. Tali risorse includono pagine Web ASP.NET (file ASPX), servizi Web (file ASMX), gestori ASP.NET (file ASHX) e qualsiasi tipo di file per il quale sia stato eseguito il mapping ad ASP.NET. Se l'applicazione ASP.NET viene eseguita in IIS 7.0, è possibile utilizzare i moduli HTTP per personalizzare le richieste per risorse gestite da IIS. This includes not just ASP.NET resources, but HTML files (.htm or .html files), graphics files, and so on. For more information, see Cenni preliminari sul ciclo di vita delle applicazioni ASP.NET per IIS 5.0 e 6.0 and Cenni preliminari sul ciclo di vita delle applicazioni ASP.NET per IIS 7.0.
Nel modulo di esempio in questo argomento viene aggiunto un messaggio alla pagina Web ASP.NET richiesta all'inizio delle richieste HTTP. Un altro messaggio viene aggiunto successivamente all'elaborazione della pagina. Il modulo include un codice il quale garantisce che non verrà aggiunto alcun testo a una richiesta per qualunque altro tipo di file.
Ogni gestore eventi viene scritto come metodo privato del modulo. Quando gli eventi registrati vengono generati, ASP.NET chiama il gestore appropriato nel modulo, il quale scrive le informazioni nella pagina Web ASP.NET.
Di seguito sono elencate alcune delle attività illustrate nella procedura dettagliata:
Creazione di codice per un modulo HTTP.
Registrazione del modulo nel file Web.config.
Prerequisiti
Per completare questa procedura dettagliata è necessario disporre dei seguenti elementi:
- Visual Studio o Visual Web Developer.
La procedura dettagliata presuppone inoltre l'utilizzo di IIS 6.0 o IIS 7.0. Tuttavia, la funzionalità del modulo risulta evidente anche in caso di esecuzione del server di sviluppo ASP.NET.
Creazione di una classe di moduli HTTP personalizzati
Per iniziare verrà creato un file della classe che implementa il modulo.
Per creare una classe di moduli HTTP personalizzati
Creare un sito Web ASP.NET e denominarlo Gestore.
Nota: È possibile scegliere un nome qualsiasi per il sito Web.
Se il sito Web non possiede ancora una cartella App_Code, crearne una nella radice del sito.
Nella directory App_Code creare un file di classe denominato HelloWorldModule.vb (per Visual Basic) o HelloWorldModule.cs (per C#).
Nota: In alternativa, se si utilizza Visual Studio (non Visual Web Developer Express Edition), è possibile creare HelloWorldModule come progetto Libreria di classi, compilarlo e inserire l'assembly risultante nella directory Bin dell'applicazione Web.
Aggiungere il seguente codice al file della classe:
Imports Microsoft.VisualBasic Imports System.Web Public Class HelloWorldModule Implements IHttpModule Public Sub New() End Sub Public ReadOnly Property ModuleName() As String Get Return "HelloWorldModule" End Get End Property ' In the Init function, register for HttpApplication ' events by adding your handlers. Public Sub Init(ByVal application As HttpApplication) _ Implements IHttpModule.Init AddHandler application.BeginRequest, _ AddressOf Me.Application_BeginRequest AddHandler application.EndRequest, _ AddressOf Me.Application_EndRequest End Sub Private Sub Application_BeginRequest(ByVal source As Object, _ ByVal e As EventArgs) ' Create HttpApplication and HttpContext objects to access ' request and response properties. Dim application As HttpApplication = DirectCast(source, _ HttpApplication) Dim context As HttpContext = application.Context Dim filePath As String = context.Request.FilePath Dim fileExtension As String = _ VirtualPathUtility.GetExtension(filePath) If fileExtension.Equals(".aspx") Then context.Response.Write("<h1><font color=red>" & _ "HelloWorldModule: Beginning of Request" & _ "</font></h1><hr>") End If End Sub Private Sub Application_EndRequest(ByVal source As Object, _ ByVal e As EventArgs) Dim application As HttpApplication = DirectCast(source, _ HttpApplication) Dim context As HttpContext = application.Context Dim filePath As String = context.Request.FilePath Dim fileExtension As String = _ VirtualPathUtility.GetExtension(filePath) If fileExtension.Equals(".aspx") Then context.Response.Write("<hr><h1><font color=red>" & _ "HelloWorldModule: End of Request</font></h1>") End If End Sub Public Sub Dispose() Implements System.Web.IHttpModule.Dispose End Sub End Class
using System; using System.Web; public class HelloWorldModule : IHttpModule { public HelloWorldModule() { } public String ModuleName { get { return "HelloWorldModule"; } } // In the Init function, register for HttpApplication // events by adding your handlers. public void Init(HttpApplication application) { application.BeginRequest += (new EventHandler(this.Application_BeginRequest)); application.EndRequest += (new EventHandler(this.Application_EndRequest)); } private void Application_BeginRequest(Object source, EventArgs e) { // Create HttpApplication and HttpContext objects to access // request and response properties. HttpApplication application = (HttpApplication)source; HttpContext context = application.Context; string filePath = context.Request.FilePath; string fileExtension = VirtualPathUtility.GetExtension(filePath); if (fileExtension.Equals(".aspx")) { context.Response.Write("<h1><font color=red>" + "HelloWorldModule: Beginning of Request" + "</font></h1><hr>"); } } private void Application_EndRequest(Object source, EventArgs e) { HttpApplication application = (HttpApplication)source; HttpContext context = application.Context; string filePath = context.Request.FilePath; string fileExtension = VirtualPathUtility.GetExtension(filePath); if (fileExtension.Equals(".aspx")) { context.Response.Write("<hr><h1><font color=red>" + "HelloWorldModule: End of Request</font></h1>"); } } public void Dispose() { } }
Salvare e chiudere il file di classe.
Scegliere Compila sito Web dal menu Compila.
Se il sito Web non viene compilato, correggere eventuali errori. Per poter registrare il modulo HTTP personalizzato, è necessario che questo venga compilato.
Registrazione del modulo HTTP in IIS 6.0 e IIS 7.0 eseguito in modalità classica
Dopo avere creato la classe HelloWorldModule, registrare il modulo creando una voce nel file Web.config. La registrazione del modulo HTTP consente di sottoscrivere le notifiche della pipeline delle richieste.
In IIS 7.0 un'applicazione può essere eseguita in modalità classica o integrata. In modalità classica le richieste vengono elaborate in modo molto simile a quanto avviene in IIS 6.0. In modalità integrata, IIS 7.0 gestisce le richieste utilizzando una pipeline che consente di condividere richieste, moduli e altre funzionalità con ASP.NET.
La procedura di registrazione di un modulo in IIS 7.0 è diversa a seconda che si utilizzi la modalità classica o la modalità integrata. In questa sezione viene descritta la procedura per IIS 6.0 e IIS 7.0 eseguito in modalità classica. La procedura di registrazione di un modulo in esecuzione nella modalità integrata di IIS 7.0 verrà descritta nella sezione successiva.
Per registrare il modulo in IIS 6.0 e IIS 7.0 eseguito in modalità classica
Se il sito Web non possiede ancora un file Web.config, crearne uno nella radice del sito.
Aggiungere il codice evidenziato di seguito al file Web.config:
<configuration> <system.web> <httpModules> <add name="HelloWorldModule" type="HelloWorldModule"/> </httpModules> </system.web> </configuration>
Nel codice viene registrato il modulo con il nome della classe e il nome del modulo di HelloWorldModule.
Registrazione del modulo HTTP in IIS 7.0 eseguito in modalità integrata
La procedura di registrazione di un modulo in IIS 7.0 eseguito in modalità integrata è leggermente diversa rispetto alla registrazione in IIS 7.0 eseguito in modalità classica.
Per registrare il modulo in IIS 7.0 eseguito in modalità integrata
Se il sito Web non possiede ancora un file Web.config, crearne uno nella radice del sito.
Aggiungere il codice evidenziato di seguito al file Web.config:
<configuration> <system.webServer> <modules> <add name="HelloWorldModule" type="HelloWorldModule"/> </modules> </system.webServer> </configuration>
Nota: È anche possibile registrare il modulo utilizzando Gestione IIS. Per ulteriori informazioni, vedere Configuring Modules in IIS 7.0 (informazioni in lingua inglese).
Nel codice viene registrato il modulo con il nome della classe e il nome del modulo di HelloWorldModule.
Test del modulo HTTP personalizzato
Dopo aver creato e registrato il modulo HTTP personalizzato, è possibile eseguirne il test.
Per eseguire il test del modulo HTTP personalizzato
Aggiungere una nuova pagina ASP.NET nell'applicazione.
Fare clic con il pulsante destro del mouse sulla pagina appena aggiunta e selezionare Visualizza nel browser.
Il modulo HTTP aggiunge una stringa all'inizio e alla fine della risposta. Il modulo viene eseguito automaticamente durante qualsiasi richiesta per un file la cui estensione sia stata assegnata ad ASP.NET. Per ulteriori informazioni, vedere Cenni preliminari su gestori HTTP e moduli HTTP.
Vedere anche
Concetti
Cenni preliminari sul ciclo di vita delle applicazioni ASP.NET per IIS 5.0 e 6.0