What is the difference between HttpApplication class and IHttpModule?
HttpApplication
is the web application instance that has multiple IHttpModule
instances registered in it. That's why every IHttpModule
instance handles a certain part of application execution thus can usually be reused on many applications (think of a Session
handling module or authentication module).
In terms of application/request handling there are many similarities. HttpApplication
has access to application-level events like OnStart, OnEnd etc as well as request-level events like OnBeginRequest, OnEndRequest etc. IHttpModule
on the other hand only has access to request-level events.
Additional note: It's possible to handle application start and end events even using an IHttpModule, but this is a non-documented feature and you have to take some special precautions. Check these two blog posts that explain it all into great depth:
Writing a customIHttpModule
that handlesApplication_OnStart
event
How to correctly useIHttpModule
to handleApplication_OnStart
event
I suggest you read a bit about application life cycle execution pipeline:
The HttpApplication Class
The HttpApplication class is used to access application wide information within an ASP.NET web application or site. Table B.3 shows the HttpApplication class properties.
Property | Description |
---|---|
Application | Returns a reference to an HttpApplicationState bag instance. This is the object that is used in the global.asax and any ASP.NET Web Form; it is this collection that holds the Application scoped variables/objects/components. |
Context | Provides access to an HttpContext object for the current instance of HttpApplication, which provides access to HTTP pipeline-module exposed objects (Request/Response, for example). |
Modules | Provides access to a collection of all HttpModules configured ... |