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 类对请求进行处理。