1、應用程序啓動
1.Application_Start方法,程序啓動
2.RegisterRoutes方法,註冊路由
3.System.Web.Mvc.RouteCollectionExtensions.MapRoute方法,出現了MvcRoutehandler對象
2、請求進入
在 「$\Windows\Microsoft.NET\Framework\版本號\Config\Web.config「 中能夠找到 " <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />」ide
證實請求會通過System.Web.Routing.UrlRoutingModule.Init方法。 ui
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視圖引擎來展現頁面