一、应用程序启动

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. android 中listview之BaseAdapter的使用

    Listview控件不像其他安卓控件那种直接拖拽到界面上就能用,而是采用类似J2EE中的MVC模型的方式使用,需要通过适配器将某种样式的数据或控件添加到其上而使用. MVC模型实现原理是 数据模型M( ...

  2. js笔记——js数据类型转换

    以下内容摘录自阮一峰的<语法概述 -- JavaScript 标准参考教程(alpha)>章节『数据类型转换』,以做备忘.更多内容请查看原文. JavaScript是一种动态类型语言,变量 ...

  3. struts2学习笔记之五:表单数据收集的几种方式

    方法一:struts2对ModelDriven模式的支持(模型驱动模式) Struts2可以采用类似于Struts1中的ActionForm方式收集数据,这样方式叫ModelDriven模式 Acti ...

  4. Java正则表达式应用详解

    如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单.如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字 ...

  5. iOS----单例模式(Singleton)

    单例的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模式的要点有三个:一是某个类只能有一个实例:二是 ...

  6. JS 操作 DOM

    定义:文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式 节点:(例如:< ...

  7. Android笔记——了解SDK,数据库sqlite的使用

    一.adb是什么? adb的全称为Android Debug Bridge,就是起到调试桥的作用.通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具 ...

  8. Java-set集合

    package exception; import java.util.Map; import java.util.TreeMap; import java.util.HashMap; public ...

  9. JTMz换路径导致MySQL服务不能启动的问题

    问题: JTMz解压到我的机器上,运行一次后,把服务停止了,然后移到了另外一个路径,JTMz中自带的MySQL服务启动不起来了. 解决: 在注册表中修改 HKEY_LOCAL_MACHINE\SYST ...

  10. 使用BCP导出导入数据

    bcp 实用工具可以在 Microsoft SQL Server 实例和用户指定格式的数据文件间大容量复制数据. 使用 bcp 实用工具可以将大量新行导入 SQL Server 表,或将表数据导出到数 ...