该找工作了,回头复习一下基础知识,增加一下理论知识的理解,下面我们看一下今天要说的。

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 更新缓存
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 则表示缓存已经更新完成。最后节结束了。

---恢复内容结束---

【ASP.NET】必须知道的ASP.NET核心处理的更多相关文章

  1. 你必须知道的ASP.NET-----IHttpAsyncHandler实质

    一.写在前面 一说到IHttpAsyncHandler,很多人会顾名思义地说'不就是异步IHttpHandler'吗? 但当我发出疑问:"你真知道他们的不同之处?你真会使用它吗?" ...

  2. Webservice WCF WebApi 前端数据可视化 前端数据可视化 C# asp.net PhoneGap html5 C# Where 网站分布式开发简介 EntityFramework Core依赖注入上下文方式不同造成内存泄漏了解一下? SQL Server之深入理解STUFF 你必须知道的EntityFramework 6.x和EntityFramework Cor

    Webservice WCF WebApi   注明:改编加组合 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API.在.net平台下, ...

  3. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  4. MVC中你必须知道的13个扩展点

    MVC中你必须知道的13个扩展点 pasting 转:http://www.cnblogs.com/kirinboy/archive/2009/06/01/13-asp-net-mvc-extensi ...

  5. 《jQuery风暴》第2章 必须知道的JavaScript知识

    第2章 必须知道的JavaScript知识 JavaScript是jQuery应用的基础,掌握JavaScript这门语言是使用jQuery的基础条件.本章不会全面细致的讲解JavaScript的全部 ...

  6. [你必须知道的.NET]第三十一回,深入.NET 4.0之,从“新”展望

    发布日期:2009.05.22 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. /// <summary> /// 本文开始,将以& ...

  7. [你必须知道的.NET]第三十回:.NET十年(下)

    发布日期:2009.05.11 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. /// <summary> /// 本文部分内容,已 ...

  8. [你必须知道的.NET]第二十九回:.NET十年(上)

    发布日期:2009.05.08 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. /// <summary> /// 本文部分内容,已 ...

  9. 终于把你必须知道的.NET看完了

    终于把你必须知道的.NET看完了,第二步就是把精通ASP.NET MVC3框架这本书搞定,练习MVC3的使用,并把EF,LINQ也练习一下,期间要做一个项目“多用户微信公众平台”项目,最近微信公众平台 ...

随机推荐

  1. HDU1531 差分约束

    King Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  2. MEF——.NET中值得体验的精妙设计

    摘要:.NET 是 Microsoft XML Web services 平台.MEF是.NET Framework 4.0一个重要的库,Visual Studio 2010 Code Editor的 ...

  3. [技巧篇]01.Servlet的优化模版代码

    Servlet.java的模版 #---------------------------------------------# # <aw:description>Template for ...

  4. AngularJS学习——价格计算器

    利用AngularJs实现价格计算器,总价满100免运费.(熟悉$watch的使用)

  5. vijos 1180 选课 树形DP

    描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修了这M门课并考核通过就能获得 ...

  6. 【HNOI】d 最小割

    [题目大意]给定一个n*m的土地,每块可以种a或b作物,每种作物在不同的位置有不同的收成,同时,有q个子矩阵中,全部种指定的作物(a或b)会有一定的加成收成,求最大收成. [数据范围] 50% n,m ...

  7. hdu 1869 六度分离(最短路floyd)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1869 六度分离 Time Limit: 5000/1000 MS (Java/Others)    M ...

  8. 【Python学习笔记】Coursera之PY4E学习笔记——String

    1.字符串合并 用“+”来进行字符串的合并,注意空格是要自己加的. 例: >>> a='Hello' >>> b= a+ 'There' >>> ...

  9. python基础===字符串切片

    字符串的子串可以通过切片标志来表示:两个由冒号隔开的索引. >>> word 'HelpA' >>> word[4] 'A' >>> word[0 ...

  10. gnu app url[web][5星]

    http://www.gnu.org/software/software.zh-cn.html http://linux.chinaunix.net/news/2010/12/07/1175310.s ...