HTML5技术

ASP.NET 运行时详解 揭开请求过程神秘面纱 - heavi

字号+ 作者:H5之家 来源:博客园 2015-12-30 17:08 我要评论( )

对于ASP.NET开发,排在前五的话题离不开请求生命周期。像什么Cache、身份认证、Role管理、Routing映射,微软到底在请求过程中干了哪些隐秘的事,现在是时候揭晓了。抛开乌云见晴天,接下来就一步步揭开请求管道神秘面纱。 上篇回顾 在介绍本篇内容之前,让我

   对于ASP.NET开发,排在前五的话题离不开请求生命周期。像什么Cache、身份认证、Role管理、Routing映射,微软到底在请求过程中干了哪些隐秘的事,现在是时候揭晓了。抛开乌云见晴天,接下来就一步步揭开请求管道神秘面纱。

上篇回顾

    在介绍本篇内容之前,让我们先回顾下上一篇《ASP.NET运行时详解 集成模式和经典模式的主要内容。在上一篇随笔中,我们提到ASP.NET运行时通过Application的InitInternal方法初始化运行管道。ASP.NET运行时提供了两种初始化管道模式,集成模式和经典模式。随后又分别介绍了两种模式下管道的初始化过程。那么,每个管道具体是做什么事以及管道具体是怎么执行的?接下来,本篇的内容会围绕着两个问题进行讲解。另外,上篇还遗留了页面的生命周期介绍。所以,本篇也会对页面生命周期做介绍。

管道步骤 

   什么是请求管道?请求管道就是把Application的一系列事件串联成一条线,这些事件按照排列的先后顺序依次执行,事件处理的对象包括HttpModule、HttpHandler、ASP.NET Page。那么,在管道中具体包括哪些事件?下图概括了ASP.NET请求管道中包括的事件。

image

   现在我们知道了管道包含的执行事件,但每个事件具体执行哪些操作?下面的列表简要列举了每个事件的执行的工作:

序号 事件 说明

1 BeginRequest 请求管道的第一个事件,当ASP.NET相应一个请求时就会被触发。

2 AuthenticateRequest 验证请求,开始检查用户身份,一般是获取请求的用户信息。

3 AuthorizeRequest 用户权限检查,未通过一般跳转到EndRequest事件。

4 ResolveRequestCache 当权限验证通过后,通过缓存模块提供服务,检查请求是否存在缓存,存在则直接返回缓存结果。

5 MapRequestHandler ASP.NET 基础结构使用 MapRequestHandler 事件来确定用于当前请求的请求处理程序。

6 AcquireRequestState 获取请求状态。

7 PreExecuteRequestHandler 在ASP.NET执行处理事件handler之前执行。

8 ExecuteRequestHandler 执行具体的Handler。

9 ReleaseRequestState 当 ASP.NET执行完请求的Handler后, State模块保存当前的状态数据。

10 UpdateRequestCache 缓存模块存储相应,提供给后面的请求缓存。

11 LogRequest 在ASP.NET生成日志之前触发。

12 EndRequest 结束当前请求。

13 SendResponse 发送请求响应。

    列表简单的描述了管道中包含的事件,每个事件都可以通过HttpModule进行扩展。其实上面这些事件只是一个空架子,而实际干活的还是上一篇随笔中我们提到的HttpModule,ASP.NET默认实现了很多IHttpModule类,而这些类就是处理篇头提出的像Cache、身份认证、Role、Rounting等操作。接下来我们就One By One的分析这些Module具体做了什么操作。

    之前我们有列举出了ASP.NET自身提供的IHttpModule,下表包含了ASP.NET自身提供的IHttpModule以及对应的类型:

序号 名称 类型

1 OutputCacheModule System.Web.Caching.OutputCacheModule

2 Session System.Web.SessionState.SessionStateModule

3 WindowsAuthentication System.Web.Security.WindowsAuthenticationModule

4 FormsAuthentication System.Web.Security.FormsAuthenticationModule

5 DefaultAuthentication System.Web.Security.DefaultAuthenticationModule

6 RoleManager System.Web.Security.RoleManagerModule

7 UrlAuthorization System.Web.Security.UrlAuthorizationModule

8 FileAuthorization System.Web.Security.FileAuthorizationModule

9 AnonymousIdentification System.Web.Security.AnonymousIdentificationModule

10 UrlMappingsModule System.Web.UrlMappingsModule

11 ServiceModel-4.0 System.ServiceModel.Activation.ServiceHttpModule, System.ServiceModel.Activation

12 UrlRoutingModule-4.0 System.Web.Routing.UrlRoutingModule

13 ScriptModule-4.0 System.Web.Handlers.ScriptModule, System.Web.Extensions

    列表中的Module会被安插到管道的事件步骤上,但每个Module具体安插到哪一个管道事件上,我们还是不清楚。要了解清楚这些,我们不得不分析这13个Module的源代码。

13个IHttpModule源代码分析

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 如何在 ASP.NET Core 中发送邮件 - Savorboard

    如何在 ASP.NET Core 中发送邮件 - Savorboard

    2017-05-02 08:02

  • 十二个 ASP.NET Core 例子 - Savorboard

    十二个 ASP.NET Core 例子 - Savorboard

    2017-04-27 16:01

  • ASP.NET MVC5请求管道和生命周期 - 雪飞鸿

    ASP.NET MVC5请求管道和生命周期 - 雪飞鸿

    2017-04-24 08:04

  • ASP.NET Core MVC 源码学习:详解 Action 的激活 - Savorboard

    ASP.NET Core MVC 源码学习:详解 Action 的激活 - Savorboard

    2017-04-14 13:04

网友点评
i