ASP.NET 最初被设计为一种开放式框架。即,可以扩展、修改或替换构成 ASP.NET 的许多模块和组件,以适应特定的要求。在 ASP.NET 2.0 中,这种框架的可扩展特性由新的 HTTPHandlers 和 HTTPModules 清楚地阐明,二者现在是该框架的一个标准部分。
请求管道
在 ASP.NET 中,请求从 Web 服务器通过 Internet 服务器应用程序编程接口 (ISAPI) 筛选器传递,并继续传递给实际的 ASP.NET 运行库。

图 5. 请求管道
当 IIS 接收一个请求时,根据 IIS 的设置将扩展映射到一个 ISAPI 筛选器。将 .ASPX、.asmx、.asd 和其他扩展映射到 ASPnet_isapi.dll,该 ASPnet_isapi.dll 只是一种启动 ASP.NET 运行库的 ISAPI 筛选器。一旦请求到达 ASP.NET 运行库,它在 HTTPApplication 对象处启动,该对象担当 ASP.NET Web 应用程序的宿主。HTTPApplication 对象:
|
1. |
读取机器级和应用程序级的配置文件。 |
|
2. |
通过一个或多个 HTTPModule 实例传递请求。每个 HTTPModule 提供一种服务,例如会话维护、身份验证,或配置文件维护。这些模块将请求传递回 HTTPApplication。 |
|
3. |
根据谓词和路径将请求传递给 HTTPHandler。谓词指请求中使用的 HTTP 谓词(GET、POST、FTP,等等),而路径指应用程序中的 URL。根据处理程序的配置方式,该请求可能作为一个 ASP.NET 页(System.Web.UI.Page 为 IHTTPHandler 的一种实现)加以处理,或者该请求可能触发另一个操作,例如批编译所有的 Web 页(precomiplation.asd 触发 PrecompHandler)。 |
在 ASP.NET 2.0 中,该模型没有变化,但是,添加了几种新模块和处理程序以提供其他的服务。与 ASP.NET 1.x 一样,您可以扩展、替换或重新配置任何模块或处理程序类,以提供自己的自定义功能。
新模块
显然,已经添加了新 HTTPModules 以支持 ASP.NET 2.0 中提供的新服务。具体地说,具有默认模块设置的 ASP.NET 应用程序将包括为以下目的而添加的新模块:
| • |
SessionID — 会话识别机制已经从 ASP.NET 1.x 会话模块分离,以提供对 cookie、URL 重写以及会话 ID 生成的其他形式的更多控制。 |
| • |
角色管理 — 添加的这种新模块用于提供基于角色的服务,以支持新用户识别机制。该模块有助于将 ASP.NET 应用程序和内置在 .NET 框架中基于角色的安全性结合起来。 |
| • |
匿名识别 — 新的个性化功能支持匿名用户。该模块有助于跟踪匿名用户可以访问的功能,以及跟踪在请求之间维护这些功能的方式。 |
| • |
配置文件 — 该配置文件模块连接新的配置文件服务,帮助为用户提供特定的持久数据存储。 |
除了这些新模块,一些旧模块的行为也进行了更改:例如,输出缓存模块现在支持新的缓存技术,这将在本白皮书的稍后部分说明。
新处理程序
除了这些新模块,ASP.NET 2.0 还引进了新的处理程序来支持应用程序配置工具以及其他的新功能,例如,批编译请求。这些新处理程序中最重要的一点是包括处理 Web 站点管理请求的“.axd”系列。这些处理程序启动内部的管理工具,这些管理工具允许开发人员配置 ASP.NET 用户和其他设置。管理处理程序包括:
| • |
Web 管理 — WebAdminHandler 是管理 Web 站点的主页。该处理程序为管理 ASP.NET 2.0 Web 应用程序提供了起点。 |
| • |
跟踪 — ASP.NET 1.xTraceHandler 已进行了改进,它是 ASP.NET 1.x 中唯一的“axd”处理程序。 |
| • |
Web 资源 — 由于有了新的管理工具和 WebResourcesHandler,现在可以在部署后配置 Web 资源。 |
| • |
缓存图像 — CachedImageServiceHandler 支持缓存图形组件。 |
| • |
计数器 — SiteCountersHandler 使用页面计数器模块为 ASP.NET 2.0 应用程序提供访问统计信息。 |
| • |
预编译 — 正如先前提到的一样,可以使用 PrecompHandler 在一个 ASP.NET 应用程序中批编译所有的 ASPX 页。 |
| • |
Web 部件导出 — WebPartExportHandler 支持存储和传输 Web 部件布局。Web 部件是一种新机制,用于个性化门户样式的 Web 应用程序的外观和内容。 |
与以前一样,HTTPForbiddenHandler 连接到不应该返回的任何文件类型。在 ASP.NET 2.0 中,禁止的文件类型列表已扩展为包括母版页、外观文件和其他的开发人员新组件。