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 customIHttpModulethat handlesApplication_OnStartevent
How to correctly useIHttpModuleto handleApplication_OnStartevent
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 ... |