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