1. 程式人生 > >1..net mvc的原理概述

1..net mvc的原理概述

runt factor execute 系統 cat 上下文 .exe 處理 asp

請求過來,根據ip和端口,由iis服務器進行接收,如果是靜態文件則直接返回文件內容,如果無法解析,則根據映射規則找到對應請求後綴

的ASPNET_ISAPI.dll處理程序集,交由其進行處理。

1.此時會生成IsapRuntime,其創建了WorkRequest對象,

2.接下來實例化HttpRunTime,由其生成HttpContext上下文對象,此時就初始化了Request,Response,Session,Application,等內置對象,

3.然後創建了HttpApplicationFactory工廠對象,其在第一次訪問時調用了Global文件中的Application_Start方法,

生成HttpApplication對象,讀取系統的配置文件,其中就包括我們的路由配置和約束,並創建HttpModel對象,調用Init方法,並註冊這些方法到管道中,

4.由HttpApplication對象調用ProcessRequest,裏面負責執行了管道時間

4.1 第一個是事件 就是BeginRequest方法,然後重點來到第7個時間,創建MVCHandler對象 ,

4.1.1將HttpContext存入其中,並讀取路由表中的路由規則生成RouteData對象,和HttpContext一並存入從而創建RequestContext,再RequestContext對象傳入RoudlerHandler.GetHttpHandler從而獲取MVCHandler,並調用context.RemapHandler將mvchandler存入httpcontext中

4.2第8個事件則檢查HttpContext中RemapHandler是否為空,如果不為空則跳過此事件,這也是和aspx最重要的不同之一,在aspx中這裏是要打造頁面控件樹的. 而.net mvc這裏是略過的

4.3來到第11至第12個事件之間會根據控制器名獲取控制器工廠來創建對應的控制器對象,傳入RequestContext調用控制器父類的ControllerBase的Execute方法,裏面就將RequestContext設置給ControllerContext,執行ExecuteCore方法, 其中就根據請求的方法名找到並調用對應的Action方法,也就是我們寫的業務,最後返回View,調用的是ActionResult.Execute 方法,,也就是父類的ViewResultBase.ExecuteResult,找到對應的視圖引擎, 獲取ViewEngineResult的View對象,獲取Response的TextWriter對象和ViewContext對象 來調用引擎的Render方法,生成html代碼並writer出去.

1..net mvc的原理概述