ASP.NET MVC源碼分析

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

HttpModule中重要的UrlRoutingModule瀏覽器

 

9:this.OnApplicationPostResolveRequestCache);mvc

10:this.PostResolveRequestCache(context);asp.net

IRouteHandler routeHandler = routeData.RouteHandler; //根據路由數據建立出了MvcRouteHandler源碼分析

IHttpHandler httpHandler = routeHandler.GetHttpHandler(requestContext);ui

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

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

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

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

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>視圖呈現

相關文章
相關標籤/搜索