浅析ASP.NET MVC生命周期

开发 后端
本文浅析Asp.net MVC生命周期,一个HTTP请求从IIS移交到Asp.net运行时,Asp.net MVC是在什么时机获得了控制权并对请求进行处理呢?

我对ASP.NET MVC生命周期还是兴趣很浓,于是提出两个问题:

一个HTTP请求从IIS移交到ASP.NET运行时,ASP.NETMVC是在什么时机获得了控制权并对请求进行处理呢?处理过程又是怎样的?

HTTP请求处理过程

以IIS7中ASP.NET MVC生命周期为例,来自MSDN的一张HTTP请求处理过程发生事件的简图,后面我列出了一个完整的事件列表。既然ASP.NET MVC还是以ASP.NET运行时为基础那么它必然要在ASP.NET MVC生命周期中对请求进行截获。***反应当然是去web.config里面去翻翻,我们可以看到UrlRoutingModule的配置节:

  1. <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.
    Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    /> 

看到这里我们的***个问题实际上已经有了答案:时机是在PostResolveRequestCache和PostMapRequestHandler.

ResolveRequestCache event
Occurs when ASP.NET finishes an authorization event to let the caching modules serve requests from the cache, bypassing execution of the event handler (for example, a page or an XML Web service).

源文档 >

PostMapRequestHandler event
Occurs when ASP.NET has mapped the current request to the appropriate event handler.

源文档 >


我们使用VS2008中ASP.NET Mvc模板创建一个Demo完成后续的讨论,当我们访问/Home的时候发生了什么呢?
1.Request 请求到来
2.IIS 根据请求特征将处理权移交给 ASP.NET
3.UrlRoutingModule将当前请求在 Route Table中进行匹配
4.UrlRoutingModule在RouteCollection中查找Request匹配的RouteHandler,默认是MvcRouteHandler MvcRouteHandler 创建 MvcHandler实例.
5.MvcHandler执行 ProcessRequest.
6.MvcHandler 使用 IControllerFactory 获得实现了IController接口的实例,找到对应的HomeController
7.根据Request触发HomeController的Index方法
8.Index将执行结果存放在ViewData
9.HomeController的Index方法返回 ActionResult
10.Views/Home/Index.aspx将 ViewData呈现在页面上
11.Index.aspx执行ProcessRequest方法
12.Index.aspx执行Render方法 输出到客户端

通过阅读ASP.NET Mvc的源码,我们可以得到更为详细的处理过程,我尽可能的忽略掉枝节,强调请求处理的流程.我们从Global.asax.cs文件切入。

【编辑推荐】

  1. 使用C#实现ASP.NET控件数组
  2. 浅析因Session导致的ASP.NET网站性能问题
  3. ASP.NET开发程序过程中值得注意的两个地方
  4. 浅谈基于URL的权限控制ASP.NET MVC中的实现
  5. ASP.NET、JSP和PHP究竟哪个好
责任编辑:佚名 来源: 千家综合布线网
相关推荐

2009-07-23 18:14:17

MVC生命周期

2009-02-12 13:16:55

请求生命周期MVCASP.NET

2009-07-23 10:23:44

2013-04-07 10:42:56

Asp.Net页面周期

2009-07-28 09:46:53

ASP.NET服务器控

2009-08-04 16:05:15

ASP.NET页面生命

2009-07-31 10:47:18

ASP.NET页面生命

2009-08-04 16:50:15

ASP.NET页面生命

2010-04-02 09:02:02

ASP.NET MVC

2009-07-31 12:43:59

ASP.NET MVC

2009-08-10 14:31:46

ASP.NET组件设计ASP.NET控件生命

2009-08-04 17:49:31

Web Page生命周ASP.NET Pos

2009-08-03 14:18:40

ASP.NET编程模型ASP.NET页面生命

2009-07-23 14:31:20

ASP.NET MVC

2009-07-23 18:55:17

ASP.NET页生命周

2012-08-16 09:38:38

ASP.NET

2011-06-21 10:26:37

2021-04-26 09:22:07

ASP.NET Cor服务周期

2009-08-03 14:37:38

ASP.NET编程模型页面生命周期

2009-07-31 17:53:39

ASP.NET线程安全
点赞
收藏

51CTO技术栈公众号