ASP.NET Web 应用程序及页面生命周期

时间:2022-08-11 10:57:05

以客户端浏览器向 ASP.NET Web 应用程序页面发送请求(Request)为起点,以浏览器收到 Web 服务器的响应(Response)为终点,这一完整的过程被称为“应用程序及页面的生命周期”。

ASP.NET Web 页面生命周期开始之前发生了什么?

  1. 用户浏览器向 Web 服务器(IIS)发出资源的请求。
  2. Web 服务器收到请求,会根据请求文件的扩展名(如 .aspx、.ascx、.ashx、.asmx),指定 ISAPI 扩展来处理该请求,这里提到的扩展名将会由 aspnet_isapi.dll 来处理。
  3. ASP.NET 接收到应用程序中任何资源的“第一个”请求时,ApplicationManager 类会创建一个应用程序域,应用程序域将为全局变量提供隔离。
  4. 在应用程序域中,HostingEnvironment 类将创建一个实例,提供有关应用程序的信息(如该应用程序的文件夹所在、名称等)的访问。
  5. 在这之后,ASP.NET 将创建并初始化核心对象(HtppContextHttpRequestHttpResponse)。HttpContext 类包含当前请求的特定对象(HttpRequest 和 HttpResponse);HttpRequest 包含当前请求的信息(如 URL,Cookie,浏览器信息);HttpResponse 包含将要发送到客户端的响应(html,Cookie)。
  6. 初始化核心对象之后,ASP.NET 创建 HttpApplication 的实例启动应用程序,创建 Global.asax 类(如果应用程序有这个文件的话)。HttpApplication 实例在第一次请求时被创建,之后的多个请求将共用此实例(提高了应用程序的性能)

ASP.NET Web 应用程序及页面生命周期        ASP.NET Web 应用程序及页面生命周期

ASP.NET 管线处理请求流程(包含 aspx 页面生命周期)

ASP.NET Web 应用程序及页面生命周期

请注意,各种事件(Event)发生的顺序和所处管道,牢记哪些是在 Modeule 中执行的,哪些又是在 Handler 中执行的。

aspx 页面的生命周期

明白了页面生命周期,及其中事件发生的顺序,以及事件发生时控件的状态,就能找到合适的接入点来植入你的程序逻辑。换言之,把逻辑处理放在 PageLoad事件中执行并不一定是最优选择。

ASP.NET Web 应用程序及页面生命周期