MVC系統學習1 MVC執行流程

2022-07-19 00:36:12 字數 3305 閱讀 6018

用mvc來做開發也有一段時間了,但是感覺一直沒入門,就徘徊在似懂非懂的層次,和去年剛畢業學習webform時一樣,當時通過張子陽老兄的幾篇文章,明白了請求處理流程,頁面生命週期才真正明白了webform的強大。由於mvc的學習資料比較少,牛人的技術部落格也只是講一些基礎的而已。因此決定通過asp.net mvc原始碼來學習,由於是開源的,也不用reflector作為輔助工具。首先還是明白下mvc的請求處理流程。有參考了msdn上面的文章(

當應用程式第一次接受請求的時候,在global.asax檔案中,route物件會新增到routetable物件中。registerroutes函式就是我們實現的路由註冊函式。

protectedvoid

publicstaticvoidregisterroutes(routecollection routes)

.axd/");

routes.maproute(

"default",

"//",

new);}

通過mvc原始碼在了解上面這一步的大致實現過程 。在registerroutes函式中,通過呼叫maproute(擴充套件方法)來實現向routecollection新增route物件。最後呼叫的是下面的方法。

view code

可以發現上面的方法實現建立乙個route對像,並將其新增到routecollection,然後將其返回。接下來了解下route類。route繼承自routebase類.其有幾個比較重要的屬性。

上面這前三個成員的型別是routevaluedictionary,而上面的函式中,是呼叫下面的這個函式來實現向route的defaults等新增資料。如注釋,就是將controller,action,id新增到defaults的鍵中,而將home,index加入到相應的鍵對應的值。而對於routehandler的作用等下再講。這樣就完成了乙個route物件的建立並且新增到routecollection中,而這個routecollection也就是routetable的成員routes.

privatevoidaddvalues(objectvalues)

//然後填充到字典裡面

foreach(propertydescriptor descriptorintypedescriptor.getproperties(values))

}

}

在asp.net管道中執行mvc請求的httpmodule是urlroutingmodule模組。urlroutingmodule使用

routetable

集合中第乙個匹配的 route 物件來建立 routedata

物件,然後使用所建立的物件建立 requestcontext

物件。urlroutingmodule裡面有乙個routecollection屬性,其就是通過routetable.routes來實現賦值的。

publicsystem.web.routing.routecollection routecollection

returnthis._routecollection;

}

set

}

protectedvirtualvoid

this.routecollection.getroutedata(context)方法裡面最後又這麼幾句**。通過遍歷當前的routecollection來實現routedata的獲取,如果獲取到則立即返回。這裡其實遍歷的單個物件不是routebase而是route,而route繼承自routebase類,並且重寫了routebase的抽象函式getroutedata(為什麼這麼做,待研究?)。而路由匹配的實現也是在route類裡重寫的getroutedata方法。

foreach(routebase base2inthis)

}

route的getroutedata方法

//如果不通過約束則返回空

}最後是在這個方法下面呼叫parsedroute的match進行路由匹配

MVC系統學習1 MVC執行流程

用mvc來做開發也有一段時間了,但是感覺一直沒入門,就徘徊在似懂非懂的層次,和去年剛畢業學習webform時一樣,當時通過張子陽老兄的幾篇文章,明白了請求處理流程,頁面生命週期才真正明白了webform的強大。由於mvc的學習資料比較少,牛人的技術部落格也只是講一些基礎的而已。因此決定通過asp.n...

1 MVC執行原理

1 mvc概述 model 模型 通常模型物件負責在資料庫中訪問資料 view 檢視 通常檢視是依據模型資料建立的 controller 控制器 通常控制器負責從檢視讀取資料,控制使用者輸入,並向模型傳送資料 2 spring mvc互動圖 3 spring mvc核心架構 4 spring mvc...

MVC學習筆記1 MVC的理解

我對mvc的理解 1.mvc更像傳統的三層 多層架構中的ui層 2.ui層又進行細分,分為m v c,3.其中view和controller層都是為了和客戶端進行互動,model對view輸入的有效性驗證。如,使用者傳送乙個請求,ip controller action,controller接收到請...