Example HTTP Module
This code example demonstrates how to implement an HTTP module. For details about how to use the example in this topic and links to the other files in this example, see How to: Create and Configure an HTTP Module.
Example
The following code example illustrates a complete HTTP module that is written as a standalone compiled assembly named Samples.Aspnet.HttpModuleExamples
. If you compile the assembly, the DLL file must exist in the Bin folder of the same ASP.NET application as the Web.config file that lists it, or you can add it to the Global Assembly Cache.
Alternatively, you can store the source-code file in the App_Code directory of the ASP.NET application. For an example that uses this kind of implementation, see How to: Create Custom HTTP Modules. For information about compilation options, see ASP.NET Compilation Model.
After you add this HTTP module to an ASP.NET application and configure it manually or using the code in the Example Configuration Code for an HTTP Module, any request to ASP.NET content in the Web site will display the following message from the module:
Current user: <user name>
Time span between begin-request and end-request events: <timespan>
Your friendly HttpModule: RequestTimeIntervalModule
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Web
Imports System.Security.Principal
Namespace Samples.Aspnet.HttpModuleExamples
Public Class RequestTimeIntervalModule
Implements IHttpModule
Public Sub Dispose() Implements IHttpModule.Dispose
End Sub
' Add event handlers to the HttpApplication.
Public Sub Init(ByVal httpApp As HttpApplication) Implements IHttpModule.Init
AddHandler httpApp.BeginRequest, AddressOf OnBeginRequest
AddHandler httpApp.EndRequest, AddressOf OnEndRequest
End Sub
' Record the time of the begin request event.
Public Sub OnBeginRequest(ByVal sender As [Object], ByVal e As EventArgs)
Dim httpApp As HttpApplication = sender
httpApp.Context.Items("beginRequestTime") = DateTime.Now
End Sub
Public Sub OnEndRequest(ByVal sender As [Object], ByVal e As EventArgs)
Dim httpApp As HttpApplication = sender
Dim beginRequestTime As DateTime = _
CType(httpApp.Context.Items("beginRequestTime"), DateTime)
' Evaluate the time between the begin and the end request events.
Dim ts As TimeSpan = DateTime.Now - beginRequestTime
' Write the time span out as a response header.
httpApp.Context.Response.AppendHeader("TimeSpan", ts.ToString())
' Get the current user's ID.
Dim user As String = WindowsIdentity.GetCurrent().Name
' Display the information in the page.
Dim sb As New StringBuilder
sb.AppendLine("<H2>RequestTimeInterval HTTP Module Output</H2>")
sb.AppendLine("Current user: ")
sb.AppendLine(user)
sb.AppendLine("<br/>Time span between begin-request and end-request events: ")
sb.AppendLine(ts.ToString())
httpApp.Context.Response.Output.WriteLine(sb.ToString)
End Sub
End Class
End Namespace
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Security.Principal;
namespace Samples.Aspnet.HttpModuleExamples
{
public class RequestTimeIntervalModule : IHttpModule
{
public void Dispose()
{
}
// Add event handlers to the HttpApplication.
public void Init(HttpApplication httpApp)
{
httpApp.BeginRequest += new EventHandler(OnBeginRequest);
httpApp.EndRequest += new EventHandler(OnEndRequest);
}
// Record the time of the begin request event.
public void OnBeginRequest(Object sender, EventArgs e)
{
HttpApplication httpApp = (HttpApplication)sender;
httpApp.Context.Items["beginRequestTime"] = DateTime.Now;
}
public void OnEndRequest(Object sender, EventArgs e)
{
HttpApplication httpApp = (HttpApplication)sender;
// Get the time of the begin request event.
DateTime beginRequestTime =
(DateTime)httpApp.Context.Items["beginRequestTime"];
// Evaluate the time between the begin and the end request events.
TimeSpan ts = DateTime.Now - beginRequestTime;
// Write the time span out as a request header.
httpApp.Context.Response.AppendHeader("TimeSpan", ts.ToString());
// Get the current user's ID.
string user = WindowsIdentity.GetCurrent().Name;
// Display the information in the page.
StringBuilder sb = new StringBuilder();
sb.AppendLine("<H2>RequestTimeInterval HTTP Module Output</H2>");
sb.AppendFormat("Current user: {0}<br/>", user);
sb.AppendFormat("Time span between begin-request and end-request events: {0}<br/>",
ts.ToString());
httpApp.Context.Response.Output.WriteLine(sb.ToString());
}
}
}
See Also
Tasks
How to: Create and Configure an HTTP Module
Reference
httpModules Element (ASP.NET Settings Schema)
HttpModuleAction
HttpModuleActionCollection
HttpModulesSection
Concepts
Introduction to HTTP Modules
Example Configuration Code for an HTTP Module