1..net mvc的原理概述

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

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

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

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

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

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

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

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

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

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

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

相關文章
相關標籤/搜索