一、Routing--路由
ASP.NET MVC生命周期中第一個步驟就是路由,ASP.NET MVC的路由過程是根據請求的Url和注冊好的路由規則表進行匹配,當一旦找到一個與之匹配找路由規則時,ASP.NET MVC路由引擎就把這個請求交給相應的IRouteHandler處理,默認是調用一個IRouteHandler是MvcHandler。如果在路由規則表中沒有找到一個相應的路由規則與請求的Url相匹配,則返回404錯誤。
我們都知道在ASP.NET MVC程序的啟動文件Global.asax中,我們要配置一些我們自己的路由規則到路由表中,以讓客戶端請求URL與進行路由規則匹配。
二、MvcHandler--默認的Mvc處理組件
MvcHandler是真正開始響應ASP.NET MVC請求的類,它是默認的ASP.NET MVC處理Handler,通過實現了接口IHttpHandler的方法ProcessRequest。代碼如下:
protected internal virtual void ProcessRequest(HttpContextBase httpContext) { SecurityUtil.ProcessInApplicationTrust(delegate { IController controller; IControllerFactory factory; this.ProcessRequestInit(httpContext, out controller, out factory); try { controller.Execute(this.RequestContext); } finally { factory.ReleaseController(controller); } }); }
從上面可以看到在ProcessRequest方法是真正響應請求,其內部通過初始化IController和IControllerFactor的實例,最后調用了controller的方法Exceute並把把請求上下文RequestContext作為參數傳入進去進行相應的處理。
protected internal virtual void ProcessRequest(HttpContextBase httpContext) { SecurityUtil.ProcessInApplicationTrust(delegate { IController controller; IControllerFactory factory; this.ProcessRequestInit(httpContext, out controller, out factory); try { controller.Execute(this.RequestContext); } finally { factory.ReleaseController(controller); } }); }
從上面可以看到在ProcessRequest方法是真正響應請求,其內部通過初始化IController和IControllerFactor的實例,最后調用了controller的方法Exceute並把把請求上下文RequestContext作為參數傳入進去進行相應的處理。
三、Controller--控制器
Controller是MVC的最核心組件,它是連接視圖和Model的橋梁,在Controller內部會有相應的Action的方法,可以決定了請求返回的視圖和數據。
我們從上面的代碼可以看到MvcHandler內部調用方法ProcessRequestInit采用輸出參數的形式返回一個IController和IControllerFactory的實例,如果成功就調用controller的Exceute方法。ControllerFactory顧名思義就是負責創建Controller實例並對其進行初始化。
四、Action Execution--Action方法
一旦Controller被創建並初始化后,里面的Action就開始上場了。這里ASP.NET MVC的框架的一個核心組件ActionInvoker就決定了請求到底是哪一個Action方法。Action方法是真正的接受請求的處理方法。Action接受用戶的輸入,進行相應的邏輯處理並把要返回數據Model准備好之后傳給相應的視圖。
五、View Result--視圖結果
Action方法的作用是接受輸入,然后進行一定的處理並准備響應數據,最后返回一個View Result類型實例。返回的View Result類型這些類型:
ViewResult, RedirectToRouteResult, RedirectResult, ContentResult, JsonResult, FileResult, and EmptyResult等等。
六、View Engine--視圖引擎
當我們在Action方法的最后返回一個View Result的時候,ASP.NET MVC框架首先就會選擇相應的視圖引擎來返回視圖。ASP.NET視圖引擎都會實現接口IViewEngine。默認ASP.NET MVC框架為我們提供了接口IViewEngine兩個實現,視圖引擎WebForm和razor。
七、View--視圖
View視圖其實就是一個模板的作用,它是把Action傳過來的數據綁定到視圖文件中並顯示到頁面中。