ASP.NET应用程序对象
一、请求的处理参数:上下文对象HttpContext
当一个请求到达ASP.NET服务器,为了处理请求,ASP.NET在服务器上创建了HttpRequest类型的对象来表示请求参数,HttpResponse类型的对象表示回应的处理对象,也就是说,为了处理一次Http请求,我们需要众多的对,象来表示处理请求所需要的数据,为了简化服务器端对参数的处理工作,ASP.NET中定义了HttpContext;类型来统一处理参数的表示问题。
二、应用程序对象HttpApplication
当HttpContext对象创建以后,HttpRuntime将随后创建一个用于处理请求的对象,这个对象的类型就是HttpApplication。它是ASP.NET中处理请求的重要对象,但是它是由ASP.NET创建的,为了便于扩展处理工作,HttpApplication采用处理管道的方法进行处理,也就是将处理分为多个步骤,每个步骤通过编写事件的形式暴露给程序员,这些事件是按照一定顺序一次触发的,我们可以通过编写事件成立方法就可以自定义每一个请求的扩展处理过程。
我们看一下HttpApplication的19个标准事件
1 BeginRequest ASP.NET开始处理的第一个事件,表示处理的开始
2 AuthenticateRequest 验证请求,一般用来处理取得请求的用户信息
3 PostAuthenticateRequest 已经获取请求的用户信息
4 AuthorizeRequest 授权,一般用来检查用户的请求是否获得权限
5 PostAuthorizeRequest 用户请求已经得到授权
6 ResolveRequestCache 获取以前处理缓存的处理结果,如果以前缓存过,就不必再进行请求的处理,直接返回缓存的结果
7 PostResolveRequestCache 已经完成缓存的获取工作
8 PostMapRequestHandler 已经根据用户的请求,创建了处理请求的处理器对象
9 AcrequireRequestState 取得请求的状态,一般用于Session
10 PostAcrequireRequestState 已经取得Session
11 PreRequestHandlerExcute 准备执行处理程序
12 PostRequestHandlerExcute 已经执行了处理程序
13 ReleaseRequestState 释放请求的状态
14 PostReleaseRequestState 已经释放了请求的状态
15 UpdateRequestCache 更新缓存
查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/aspx/
16 PostUpdateRequestCache 已经更新了缓存
17 LogRequest 请求的日志操作
18 PostLogRequest 已经完成了请求的日志操作
19 EndRequest 本次请求到此结束
首先触发的事件就是BeginRequest,这个事件标志着服务器处理工作的开始,也是程序员在ASP.NET中针对请求所能处理的第一个事件。
开始处理请求后,第一个工作就是要验证用户的身份以实现安全机制,这个工作通过AuthenticateRequest和PostAuthenticateRequest两个事件处理。显然AuthenticateRequest表示开始检查用户身份,而PostAuthenticateRequest表示验证完成。
当ASP.NET获取用户身份后,根据当前用户的身份,开始请求权限的检查工作,当第四个事件AuthorizeRequest触发的时候,表示进行用户权限的检查工作,而第五个事件则标志着完成了用户权限的检查工作,如果用户没有通过安全检查,一般情况下,将跳过剩下的事件,直接触发最后一个事件结束处理。
当用户获得了请求的权限,那么服务器开始准备用最快的方式来是用户得到回应的结果,ResolveRequestCache事件标志着检查缓存,看看是否可以直接从以前的缓存的结果中直接取得处理的结果。PostResolveRequestCache 表示缓存检查的结束。
当不能从缓存中获取结果的时候,则必须通过一次处理来计算当前请求的结果,在.NET中,用于处理请求以得到结果的需对象称之为处理对象Handler,在ASP,NET中提供了许多处理程序,程序员也可以自定义处理程序,为了处理这个请求,ASP.NET必须按照匹配规则找到一个处理当前求情的处理程,PostMapRequestHandler事件标志ASP.NET已经获得了这个处理程序对象,HttpContext的Handler就表示这个处理对象。
得到处理程序后,还不能立马开始处理,这是因为处理请求还需要许多与这个请求相关的数据,比如我们保存在服务器上关于用户的一些数据,于是Session就出现了,他提供了基于会话的状态管理。
为了获取用户以前保存的数据,AcrequireRequestState事件给程序员提供了一个切入点,PostAcrequireRequestState 则表示应经获取了用户的数据,可以在处理中使用了。
现在我们接下来就是PreRequestHandlerExcute真正开始告诉程序员处理程序就要开始工作了。如果用户的状态已经获取,还有需要在处理程序处理之前进行的工作,就在这个事件中开始吧。
在PreRequestHandlerExcute事件之后,ASP.NET服务器将通过执行处理程序完成请求的处理工作,这个处理程序可能是一个Web窗体,也可能是一个Web服务。
处理程序完成后,服务器开始扫尾工作,PostRequestHandlerExcute 通知程序员,ASP.NET服务器的处理程序已经完成。
在处理完成后,由于在处理程序中,用户可能修改了用户特定的专属数据,那么修改后的用户状态数据可能需要进行序列化和保存处理,ReleaseRequestState事件通知程序员释放这些数据,PostReleaseRequestState则表示已经释放完成。
在处理完成后,如果希望将这次处理的结果缓存起来,以便于在后继的请求中可以直接使用这个结果,UpdateRequestCache 提供了处理的机会,PostUpdateRequestCache 则表示缓存已经更新完成。最后节结束了。
---恢复内容结束---