ASP.NET MVC 请求流程
一、应用程序启动
1.Application_Start方法,程序启动

2.RegisterRoutes方法,注册路由

3.System.Web.Mvc.RouteCollectionExtensions.MapRoute方法,出现了MvcRoutehandler对象

二、请求进入
在 “$\Windows\Microsoft.NET\Framework\版本号\Config\Web.config“ 中可以找到 " <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />”
证明请求会经过System.Web.Routing.UrlRoutingModule.Init方法。
1.System.Web.Routing.UrlRoutingModule.Init方法

2.System.Web.Routing.UrlRoutingModule.PostResolveRequestCache方法

3.System.Web.Routing.RouteCollection.GetRouteData方法

4.System.Web.Routing.Route.GetRouteDara方法

这里的this.RouteHandler就是在第一部分中应用程序启动是实例化好的MvcRouteHandler对象。好了,我们现在已经得到了MvcRouteHandler实例,继续向下走,先返回第2步:
2.System.Web.Routing.UrlRoutingModule.PostResolveRequestCache方法

3. System.Web.Mvc.MvcRouteHandler.GetHttpHandler方法,返回MvcHandler对象

4.System.Web.Mvc.MvcHandler的构成方法

发现这个类实现了IHttpHandler接口,那么不得不去看下ProcessRequest方法
5.System.Web.Mvc.MvcHandler.ProcessRequest方法

6.System.Web.Mvc.MvcHandler.ProcessRequestInit方法

返回到第5步
5.System.Web.Mvc.MvcHandler.ProcessRequest方法

6.System.Web.Mvc.ControllerBase.Excete方法

7.System.Web.Mvc.Controller.ExcuteCore方法

8.System.Web.Mvc.Controller.ActionInvoker属性

9.System.Web.Mvc.Controller.CreateActionInvoker方法

返回了实现IActionInvoker接口的实例,返回第7步
7.System.Web.Mvc.Controller.ExcuteCore方法

8.System.Web.Mvc.ControllerActionInvoker.InvokeAction方法

9.System.Web.Mvc.ControllerActionInvoker.InvokeActionResult方法

10.System.Web.Mvc.ActionResult类,封装一个操作方法的结果

我们来看一下重写了ExcuteResult的ActionResult的派生类:

我们就选ViewResultBase类中的ExcuteResult方法看看
11.System.Web.Mvc.ViewResultBase.ExcuteResult方法

12.System.Web.Mvc.ViewResult.ExcuteResult方法

13.System.Web.Mvc.ViewEngineCollection.FindView方法

14.System.Web.Mvc.VirtualPathProviderViewEngine.FindView方法

返回第13步
13.System.Web.Mvc.ViewEngineCollection.FindView方法

14.System.Web.Mvc.ViewEngineCollection.Find方法

15.System.Web.Mvc.ViewEngineCollection.Find方法

至此,我们得到了ViewEngineResult对象,ViewEngineResult表示定位视图引擎的结果。
现在我们返回第11步,继续向下走
11.System.Web.Mvc.ViewResultBase.ExcuteResult方法

12.System.Web.Mvc.BuildManagerCompiledView.Render方法

13. System.Web.Mvc.RazorView.RenderView方法,在这里使用Razor视图引擎来展示页面

ASP.NET MVC 请求流程的更多相关文章
- asp.net mvc请求流程
收对应用程序的第一个请求 > 执行路由 > 创建 MVC 请求处理程序 > 创建控制器 > 执行控制器 > 调用操作 > 执行结果
- ASP.NET MVC 请求流程:Controller
1.请求进入时,.NET Framework就找出所有的HttpModule,以此调用它们的Init方法,如下图所示,我们重点关注"UrlRoutingModule-4.0"的Ht ...
- ASP.NET MVC 请求流程:Route
1.RouteTable RouteTable翻译过来的意思就是路由表,一个Web应用程序具有一个全局的路由表,该路由表通过System.Web.Routiing.RouteTable的静态只读属性R ...
- .NET MVC请求流程
ASP.NET MVC 请求流程:Controller MvcHandler Action Action参数赋值 .NET MVC权限设计思考之切入点
- ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程
好听的歌 我一直觉得看一篇文章再听一首好听的歌,真是种享受.于是,我在这里嵌入一首好听的歌,当然你觉得不想听的话可以点击停止,歌曲 from 王菲 <梦中人>: --> 开篇:上一篇 ...
- ASP.Net MVC请求处理流程
ASP.Net MVC请求处理流程 好听的歌 我一直觉得看一篇文章再听一首好听的歌,真是种享受.于是,我在这里嵌入一首好听的歌,当然你觉得不想听的话可以点击停止,歌曲 from 王菲 <梦中人& ...
- asp.net mvc 请求处理流程,记录一下。
asp.net mvc 请求处理流程,记录一下.
- 【MVC】ASP.NET MVC 请求生命周期
当一个asp.net mvc应用程序提出请求,为了响应请求,包含一些请求执行流程步骤! 在asp.net mvc应用程序Http request和Http response 过程中,主要包含8个步骤: ...
- Asp.net Mvc 请求是如何到达 MvcHandler的——UrlRoutingModule、MvcRouteHandler分析,并造个轮子
这个是转载自:http://www.cnblogs.com/keyindex/archive/2012/08/11/2634005.html(那个比较容易忘记,希望博主不要生气的) 前言 本文假定读者 ...
随机推荐
- iOS——Core Animation 知识摘抄(二)
阴影 主要是shadowOpacity .shadowColor.shadowOffset和shadowRadius四个属性 shadowPath属性 我们已经知道图层阴影并不总是方的,而是从图层内容 ...
- MYSQL分页存储过程及事务处理
最近给客户做的一小系统是SQLSERVER的数据库,因为特殊原因要切换到MYSQL上去,切换数据库确实让人头疼的,SQLSERVER和MYSQL的存储过程还是有很大差别的,下面是我做切换时转换的MYS ...
- Effective Java 创建和销毁对象
<Effective Java>阅读笔记,用适合自己理解的方式提炼该书内容.<Effective Java>是一本很实用的书,阅读方法应该是快速的领会,总结,然后应用.而非,一 ...
- 自制操作系统 (三) 从启动区执行操作系统并进入C世界
qq:992591601 欢迎交流 2016.04.03 2016.05.31 2016.06.29 这一章是有些复杂的,我不太懂作者为什么要把这么多内容都放进一天. 1读入了十个柱面 2从启动区执行 ...
- Java基础之I/O和file
五.IO流1.IO流概述 (1)用来处理设备(硬盘,控制台,内存)间的数据. (2)java中对数据的操作都是通过流的方式. (3)java用于操作流的类都在io包中. (4)按照流操作的数据的类型不 ...
- python学习 数据类型之序列
一.序列(本文使用python3.5)############################################################# 列表.元组 字符窜都是序列#特点:#1 ...
- ngOptions
ngOptions select as select as label for value in array <select ng-model="myColor" ng-op ...
- NPM安装之后CMD中不能使用
NPM安装之后CMD中不能使用 这个情况就是path环境变量没有添加NPM 添加环境变量并重启CMD C:\Users\Mark\AppData\Roaming\npm\ 看看这个文件夹就知道为什么要 ...
- Html与CSS快速入门01-基础概念
Web前端技术一直是自己的薄弱环节,经常为了调节一个简单的样式花费大量的时间.最近趁着在做前端部分的开发,果断把这部分知识成体系的恶补一下.内容相对都比较简单,很类似工具手册的学习,但目标是熟练掌握. ...
- ssh(sturts2_spring_hibernate) 框架搭建之hibernate2
一.今天要进行解答的是对上次hibernate1进行进一步的完善,这次第一是进一步使用spring注入一个SessionFactory实例,避免了自己new实例:第二是应用数据库池(c3p0). 二. ...