ASP.NET MVC源碼分析


MVC4 源碼分析(Visual studio 2012/2013)

HttpModule中重要的UrlRoutingModule

 

9:this.OnApplicationPostResolveRequestCache);

10:this.PostResolveRequestCache(context);

IRouteHandler routeHandler = routeData.RouteHandler; //根據路由數據創建出了MvcRouteHandler

IHttpHandler httpHandler = routeHandler.GetHttpHandler(requestContext);

根據MvcRouteHandler創建出了MvcHandler:IHttpHandler(MvcHandler實現了IHttpHandler接口,接下來就要進入MVC源代碼分析)

在MVC4源代碼src文件夾System.Web.Mvc類庫下

MVC4百度雲源代碼:鏈接:http://pan.baidu.com/s/1pLDvXB9  密碼:4tiv

Reflector7百度雲盤:鏈接:http://pan.baidu.com/s/1eSm9Y06  密碼:gyx0

1:routeHandler.GetHttpHandler(requestContext);

2:MvcHandler.cs  ProcessRequest方法

通過工廠模式創建MVC中的Controller控制器,然后執行Execute方法

3:controller.Execute(RequestContext);

IController是接口,需要找具體實現類(之前通過工廠模式創建Controller控制器,優先去找Controller類)

Controller : ControllerBase  //Controller並沒有實現IController接口,找其父類

ControllerBase : IController  //ControllerBase實現了IController接口

4:ExecuteCore()  //Controller類中

 

5:ActionInvoker.InvokeAction(ControllerContext, actionName)方法

ControllerActionInvoker : IActionInvoker  //ControllerActionInvoker 實現了IActionInvoker  接口

6:InvokeActioin

1:InvokeActionMethodWithFilters

1.1:InvokeActionMethod

2:InvokeActionResultWithFilters

2.1:InvokeActionResultFilterRecursive

2.2:InvokeActionResult

7:actionResult.ExecuteResult(controllerContext);

ViewResult : ViewResultBase   //ViewResult 並沒有實現ActionResult接口,找其父類

ViewResultBase : ActionResult  //ViewResultBase實現了ActionResult接口

8:View.Render(viewContext, writer); 渲染View視圖【WebForm.aspx視圖引擎】

WebFormView : BuildManagerCompiledView  //WebFormView 並沒有實現IView接口,找其父類

BuildManagerCompiledView : IView  //BuildManagerCompiledView實現了IView接口

8.1:BuildManagerCompiledView (WebForm.aspx視圖引擎模式)

RenderView為抽象類,由其子類實現具體方法內容

執行ASP.NET 頁面生命周期ProcessRequest方法,把后續第13/第14等事件執行完畢,然后把Render渲染好的所有html代碼返回給瀏覽器

Application  19事件

 

ASP.NET MVC源碼分析

1:獲取ControllerFacotry,根據上下文反射Controller對象

  在Mvchandler的PR方法中

2:調用controller.Execute方法

  在MvcHandler的PR方法中

3:調用ActionInvoker.InvokeAction方法

  當前Controller類 -->ControllerBase類的Execute方法-->Controller類的ExecuteCore方法

4:調用InvokeActionResultWithFilter

  ActionInvoker對象為ControllerActionInvoker類的實例

5:調用actionResult.ExecuteResult

6:調用View.Render方法,將頁面渲染到輸出流中

  ViewResult類-->ViewResultBase類

當一個asp.net mvc應用程序提出請求,為了響應請求,包含一些請求執行流程步驟!在asp.net mvc應用程序Http request和Http Response過程中,

主要包含8個步驟:

1>RouteTable(路由表)的創建

2>UrlRoutingModule 請求攔截

3>Routing engine 確定route

4>route handler 創建相關的IHttpHandler實例

5>IHttpHandler實例確定Controller(控制器)

6>Controller執行

7>一個視圖引擎創建

8>視圖呈現


免責聲明!

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



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