ASP.NET MVC 請求流程


一、應用程序啟動

1.Application_Start方法,程序啟動

image_thumb8

2.RegisterRoutes方法,注冊路由

image_thumb9

3.System.Web.Mvc.RouteCollectionExtensions.MapRoute方法,出現了MvcRoutehandler對象

image_thumb111

二、請求進入

在 “$\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方法

image_thumb

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方法

image_thumb12

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

image_thumb15

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

image_thumb17

發現這個類實現了IHttpHandler接口,那么不得不去看下ProcessRequest方法

5.System.Web.Mvc.MvcHandler.ProcessRequest方法

image_thumb30

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

image_thumb31

返回到第5步

5.System.Web.Mvc.MvcHandler.ProcessRequest方法

image_thumb32

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

image_thumb26

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

image_thumb33

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

image_thumb29

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

image_thumb28

返回了實現IActionInvoker接口的實例,返回第7步

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

image_thumb27

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

image_thumb7

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

image_thumb91

10.System.Web.Mvc.ActionResult類,封裝一個操作方法的結果

image_thumb10

我們來看一下重寫了ExcuteResult的ActionResult的派生類:

image_thumb11

我們就選ViewResultBase類中的ExcuteResult方法看看

11.System.Web.Mvc.ViewResultBase.ExcuteResult方法

image_thumb13

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

image_thumb21

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

image_thumb22

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

image_thumb23

返回第13步

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

image_thumb24

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

image_thumb18

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

image_thumb19

至此,我們得到了ViewEngineResult對象,ViewEngineResult表示定位視圖引擎的結果。

現在我們返回第11步,繼續向下走

11.System.Web.Mvc.ViewResultBase.ExcuteResult方法

image_thumb20

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

image_thumb34

13. System.Web.Mvc.RazorView.RenderView方法,在這里使用Razor視圖引擎來展示頁面

image_thumb35


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM