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

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. 洛谷2115 [USACO14MAR]破坏Sabotage

    https://www.luogu.org/problem/show?pid=2115 题目描述 Farmer John's arch-nemesis, Farmer Paul, has decide ...

  2. 数据结构&字符串:01字典树

    利用01字典树查询最大异或值 01字典树的是只含有0和1两种字符的字典树,在使用它的时候,把若干数字转成二进制后插入其中 在查询树中的哪个数字和给定数字有最大异或值的时候,从根开始贪心查询就ok了 H ...

  3. MyBatis框架的使用及源码分析(十三) ResultSetHandler

    在PreparedStatementHandler中的query()方法中,用ResultSetHandler来完成结果集的映射. public <E> List<E> que ...

  4. 优雅退出telnet

    echo "" |telnet IP 端口

  5. 验证组件——FluentValidation

          FluentValidation FluentValidation是与ASP.NET DataAnnotataion Attribute验证实体不同的数据验证组件,提供了将实体与验证分离开 ...

  6. 【NOIP】2013 花匠

    [算法]贪心 [题解] DP可以f[i][0],f[i][1]表示选了i分别满足条件AB的答案,其优化也是利用了下面的性质,不多赘述. 想象数列的波动,最大值一定是取每个波峰和每个波谷,那么只要O(n ...

  7. Shuffle Cards(牛客第三场+splay)

    题目: 题意:将1~n的数进行m次操作,每次操作将第pi位到pi+si-1位的数字移到第一位,求最后的排列. 思路:现在还没不会写splay,在知道这是splay模板题后找了一波别人的模板,虽然过了, ...

  8. kolakoski序列

                   搜狐笔试=.= 当时少想一个slow的指针..呜呜呜哇的一声哭出来 function kolakoski(token0, token1) { token0 = token ...

  9. ThinkSnS v4后台任意文件下载漏洞

    漏洞文件: /apps/admin/Lib/Action/UpgradeAction.class.php 主要问题还是出现在了180行直接将远程获取到的图片直接保存. 文中可见并没有做任何的对$dow ...

  10. frp 使用入门

    1.下载安装对应系统版本 https://github.com/fatedier/frp/releases/ 2.将下载的frp移动到系统软件目录 mv frp/ /usr/local 3.配置frp ...