ASP.NET 请求处理完整过程
请求过程
1.客户端发送请求给服务器端。
2.首先由服务器端的HTTP.SYS内核模块接受,根据端口分发给IIS(或者其他web服务器软件)。
3.IIS(由一个软件进程,一个w3svc服务组成)接收到请求后,会根据端口分发给指定的工作进程
4.工作进程会对所请求的文件的文件扩展名进行检查,交给对应的扩展程序处理。(如 .aspx、.ascx、.ashx 和 .asmx则交给aspnet_isapi.dll扩展程序)
5.当请求为.aspx时,扩展程序会交给ASPNetRuntime托管环境调用ISAPIRuntime.ProcessRequest(IntPtr ecb)方法,(ecb就是请求的句柄。句柄就是操作系统对一个资源的标识)。
6.ISAPIRuntime的PR方法中 把请求封装成HttpWorkRequest对象 然后调用HttpRuntime.pr方法。
7.在HttpRuntime的PR方法中,把HttpWorkRequest对象封装成HttpContext对象。然后通过HttpApplicationFactory生产一个HttpApplication对象出来。
8.HttpApplication对象会拿着这个HttpContext对象走管线处理请求。
9.在管线请求中,第7和8事件中默认会根据请求实例化实现IHttpHandle的对象A。第11,12事件中,会调用A的PR方法。
10.如果A是一般处理程序,则直接调用PR方法。如果是aspx程序,则会走页面生命周期过程。
页面生命周期
1.Create Instance 创建所有控件
2.IsPostBack 确定是不是第一次处理该页
3.Init 所有控件都已初始化且已应用所有外观设置后引发
3.ViewState 加载ViewState设置控件值
4.Load 执行所有的Load事件
5.ChangeEvent 执行控件更改的事件
6.Complete 事件
7.PreRender 预呈现页面,最后更改页面的机会
8.SaveState 保存状态放到页面中
9.Render 呈现页面
10.Unload 卸载
管线事件
-
对请求进行验证,将检查浏览器发送的信息,并确定其是否包含潜在恶意标记。 有关更多信息,请参见 ValidateRequest 和脚本侵入概述。
-
如果已在 Web.config 文件的 UrlMappingsSection 节中配置了任何 URL,则执行 URL 映射。
-
引发 BeginRequest 事件。
-
引发 AuthenticateRequest 事件。
-
引发 PostAuthenticateRequest 事件。
-
引发 AuthorizeRequest 事件。
-
引发 PostAuthorizeRequest 事件。
-
引发 ResolveRequestCache 事件。
-
引发 PostResolveRequestCache 事件。
-
根据所请求资源的文件扩展名(在应用程序的配置文件中映射),选择实现 IHttpHandler 的类,对请求进行处理。 如果该请求针对从 Page 类派生的对象(页),并且需要对该页进行编译,则 ASP.NET 会在创建该页的实例之前对其进行编译。
-
引发 PostMapRequestHandler 事件。
-
引发 AcquireRequestState 事件。
-
引发 PostAcquireRequestState 事件。
-
引发 PreRequestHandlerExecute 事件。
-
为该请求调用合适的 IHttpHandler 类的 ProcessRequest 方法(或异步版 IHttpAsyncHandler.BeginProcessRequest)。 例如,如果该请求针对某页,则当前的页实例将处理该请求。
-
引发 PostRequestHandlerExecute 事件。
-
引发 ReleaseRequestState 事件。
-
引发 PostReleaseRequestState 事件。
-
如果定义了 Filter 属性,则执行响应筛选。
-
引发 UpdateRequestCache 事件。
-
引发 PostUpdateRequestCache 事件。
-
引发 EndRequest 事件。
-
引发 PreSendRequestHeaders 事件。
-
引发 PreSendRequestContent 事件。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。