At the end of the day, writing a Web server is all about processing HTTP requests and delivering responses. ASP.NET is no different; its main purpose in life is to service HTTP requests and responses. In this vein, ASP.NET deemphasizes the ISAPI architecture that has been around for the last six years or so. ISAPI has not disappeared; it is just that ASP.NET prefers the common language runtime (CLR) to Internet information server's (IIS's) ISAPI/ASP architecture wherever possible.
ASP.NET works by dispatching HTTP requests to handler objects. That is, ASP.NET dispatches HTTP requests to those objects implementing a CLR interface named IHttpHandler. You can bind uniform resource identifier (URI) paths to classes for handling specific requests (see Chapter 8). InternetBaton (see Chapter 2) also uses this technique. For example, if someone submits a query for some information, you can map that URI to a specific class for handling that query. Incoming URIs that are not mapped to a specific handler class are swallowed by ASP.NET's default handler. Most of the time, the file specified in the URI is a basic ASPX file. Let's take a look at the core of an ASP.NET page.