background image

IIS

 

收到请求。 选择器根据

URL 的特点与 IIS 中的配置,选择一个 ISAPI

用于处理该请求

—现在自然会选择 ASP.NET ISAPI  

ASP.NET 执行引擎接收到请求,于是初始化

 

数 据 ( 例 如 构 建 各 种 对 象 ) 。 开 始 触 发 各 种

Pipeline 事 件 , 自 然 先 从

BeginRequest

 

开始。 经过了多个

Pipeline 事件,ASP.NET 根据配置为当前请求

选择一个合适的

Handler 或 HandlerFactory 进行处理(当然特殊情况例外,例

 

如已经在之前的事件中直接输出结果并结束请求了)。 经过了

Handler 处理之后

又经过几个

Pipeline 事件,以 EndRequest

 

结束。 输出

Response。

  在一个

ASP.NET 应用中如果要进行 URL Rewrite,那么一般就是在 BeginRequest

事件中调用

HttpContext 的 RewritePath

方法,将该请求重新 定位 至一个目标

URL。例如我们就可以在 Global.asax 中重写 Application_BeginRequest 方法

来实现这一点:

  之所以在

BeginRequest 中进行 Rewrite,是因为这个事件是在所有 Pipeline 事件

中最早被触发的。在这时进行了重新 定位 之后,当前

HttpContext 中的一些属性

也就发生了相应的变化(例如

HttpContext.Request.Path)。这样,接下来的

Pipeline 事件的处理程序逻辑就会受到影响。例如在需要根据目录进行权限判断时,

就会使用 定位 后的路径,而不是

ASP.NET

所收到的请求。自然最 显著 的变化就

是对

Handler

的选择,例如上例,我们把请求重新定位至

CustomerList.aspx”

文 件 , 这 样

ASP.NET 引 擎 就 会 选 择 *.aspx 所 对 应 的

System.Web.UI.PageHandlerFactory 类对请求进行处理。