一、应用程序启动

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 请求流程的更多相关文章

  1. asp.net mvc请求流程

    收对应用程序的第一个请求 > 执行路由 > 创建 MVC 请求处理程序 > 创建控制器 > 执行控制器 > 调用操作 > 执行结果

  2. ASP.NET MVC 请求流程:Controller

    1.请求进入时,.NET Framework就找出所有的HttpModule,以此调用它们的Init方法,如下图所示,我们重点关注"UrlRoutingModule-4.0"的Ht ...

  3. ASP.NET MVC 请求流程:Route

    1.RouteTable RouteTable翻译过来的意思就是路由表,一个Web应用程序具有一个全局的路由表,该路由表通过System.Web.Routiing.RouteTable的静态只读属性R ...

  4. .NET MVC请求流程

    ASP.NET MVC 请求流程:Controller MvcHandler Action Action参数赋值 .NET MVC权限设计思考之切入点

  5. ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程

    好听的歌 我一直觉得看一篇文章再听一首好听的歌,真是种享受.于是,我在这里嵌入一首好听的歌,当然你觉得不想听的话可以点击停止,歌曲 from 王菲 <梦中人>: --> 开篇:上一篇 ...

  6. ASP.Net MVC请求处理流程

    ASP.Net MVC请求处理流程 好听的歌 我一直觉得看一篇文章再听一首好听的歌,真是种享受.于是,我在这里嵌入一首好听的歌,当然你觉得不想听的话可以点击停止,歌曲 from 王菲 <梦中人& ...

  7. asp.net mvc 请求处理流程,记录一下。

    asp.net mvc 请求处理流程,记录一下.

  8. 【MVC】ASP.NET MVC 请求生命周期

    当一个asp.net mvc应用程序提出请求,为了响应请求,包含一些请求执行流程步骤! 在asp.net mvc应用程序Http request和Http response 过程中,主要包含8个步骤: ...

  9. Asp.net Mvc 请求是如何到达 MvcHandler的——UrlRoutingModule、MvcRouteHandler分析,并造个轮子

    这个是转载自:http://www.cnblogs.com/keyindex/archive/2012/08/11/2634005.html(那个比较容易忘记,希望博主不要生气的) 前言 本文假定读者 ...

随机推荐

  1. [异常解决] ubuntu上安装虚拟机遇到的问题(vmware坑了,virtual-box简单安装,在virtual-box中安装精简版win7)

    利用周末时间将整个电脑格式化,换成了ubuntu系统- 所谓:扫清屋子再请客! 但是有些软件只在win上有,于是还是考虑装个虚拟机来个——逐步过度策略,一点点地从win上转移到linux上 我的系统是 ...

  2. Atitit 语音识别的技术原理

    Atitit 语音识别的技术原理 1.1. 语音识别技术,也被称为自动语音识别Automatic Speech Recognition,(ASR),2 1.2. 模型目前,主流的大词汇量语音识别系统多 ...

  3. Atitit 作用域的理解attilax总结

    Atitit 作用域的理解attilax总结 1.1. 作用域是指对某一变量和方法具有访问权限的代码空间, 1 1.2. 作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突.1 1.3 ...

  4. react7 react 三目运算

    <body><!-- React 真实 DOM 将会插入到这里 --><div id="example"></div> <!- ...

  5. javascript_core_08之闭包、对象、原型

    1.闭包: ①外层函数包裹受保护的变量和操作变量的内层函数: ②外层函数将内层函数返回到外部: ③调用外部函数,获得内层函数的对象: 2.面向对象:用对象描述现实一个具体事物属性和功能,按需调用功能, ...

  6. struts1的一些基本用法和操作

    入职两周了,项目是用struts1+ibatis框架搭建的,数据库是oracle,其他还行,关键是struts1之前没用用过,所以只好在网上狂查文档,最后大致整理了一些struts1的基本使用方法. ...

  7. Sort the Array

    /* 思路: 找到单调下降串的起始位置[l, r] 如果左边 0...l-1中的最大值 > l...r中的最小值 或者 r+1...n中的最小值 < l...r中的最大值 都是不能实现排序 ...

  8. 【原创】.NET读写Excel工具Spire.Xls使用(4)对数据操作与控制

                  本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...

  9. 【转】FastCgi与PHP-fpm关系

    刚开始对这个问题我也挺纠结的,看了<HTTP权威指南>后,感觉清晰了不少. 首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. ...

  10. Pentaho Kettle 6.1连接CDH5.4.0集群

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 欢迎转载 最近把之前写的Hadoop MapReduce程序又总结了下,发现很多逻辑基本都是大致相同的,于是想到 ...