对ASP.NET Web应用程序的请求由ASP.NET运行引擎在一个管线进程里处理。在这个请求被处理的时候,它就被从Web服务器(IIS)传递到HTTP应用程序,后者global.asax里的事件会对HTTP模块启动。在这些模块里,会话状态、安全以及其他信息会被处理。最后,专用的HTTP句柄会生成页面。图A说明了这一过程。
图A
ASP.NET请求处理的简化图
在处理过程中,信息被附加到HttpContext对象里,这个对象能够通过Context属性最终在任何Page和UserControl类里被访问到。
除了允许访问当前请求的其他信息之外,HttpContext对象也能够被自定义的数据所填充,这些自定义数据能够被请求的其余内容访问。例如,global.asax代码分离(code-behind)类的BeginRequest事件能够包含读取数据的代码,这个数据库里放有动态页面布局的信息。这样这个信息就能够被放置在HttpContext对象里,并且能够从任何页面访问到,用以加载用户的控件和自动更改页面显示选项。
另一个例子是从Web页面取回用户的输入,然后把信息放到上下文里从而把信息传递给另一个页面,就像下面这样:
Me.Context.Items.Add("dept", txtDept.Text) Me.Context.Items.Add("city", txtCity.Text) Me.Server.Transfer("displayData.aspx")
在这种情况下,要注意缓冲区里的项目是能够被任何类型的数据所填充的名称-值对。但是对于要在另一个页面上取回的数据,Server对象的Transfer方法必须被用来执行下一个页面而不是带有查询字符串的Response.Redirect,因为后者会让浏览器创建一个对此页面的新请求,因此会创建一个新的HttpContext。而Server.Transfer在另一方面会在服务器端继续执行同一个请求,并保持已有的HttpContext。