用mvc來做開發也有一段時間了,但是感覺一直沒入門,就徘徊在似懂非懂的層次,和去年剛畢業學習webform時一樣,當時通過張子陽老兄的幾篇文章,明白了請求處理流程,頁面生命週期才真正明白了webform的強大。由於mvc的學習資料比較少,牛人的技術部落格也只是講一些基礎的而已。因此決定通過asp.net mvc原始碼來學習,由於是開源的,也不用reflector作為輔助工具。首先還是明白下mvc的請求處理流程。有參考了msdn上面的文章(
當應用程式第一次接受請求的時候,在global.asax檔案中,route物件會新增到routetable物件中。registerroutes函式就是我們實現的路由註冊函式。
public static void registerroutes(routecollection routes)
.axd/");
routes.maproute(
"default",
"//",
new );}
通過mvc原始碼在了解上面這一步的大致實現過程 。在registerroutes函式中,通過呼叫maproute(擴充套件方法)來實現向routecollection新增route物件。最後呼叫的是下面的方法。
view code
1可以發現上面的方法實現建立乙個route對像,並將其新增到routecollection,然後將其返回。接下來了解下route類。route繼承自routebase類.其有幾個比較重要的屬性。//todo:新增路由的方法
2public
static
route maproute(
this
routecollection routes,
string
name,
string
url,
object
defaults,
object
constraints,
string
namespaces) 6if
(url
==null) 9
10route route
=new
route(url,
newmvcroutehandler()) ;
1516
if((namespaces
!=null
) &&
(namespaces.length
>
0))
1920
routes.add(name, route);
2122
return
route;23}
上面這前三個成員的型別是routevaluedictionary,而上面的函式中,是呼叫下面的這個函式來實現向route的defaults等新增資料。如注釋,就是將controller,action,id新增到defaults的鍵中,而將home,index加入到相應的鍵對應的值。而對於routehandler的作用等下再講。這樣就完成了乙個route物件的建立並且新增到routecollection中,而這個routecollection也就是routetable的成員routes.
private void addvalues(object values)在asp.net管道中執行mvc請求的httpmodule是urlroutingmodule模組。urlroutingmodule使用//然後填充到字典裡面
foreach (propertydescriptor descriptor in typedescriptor.getproperties(values))}}
routetable
集合中第乙個匹配的 route
物件來建立 routedata
物件,然後使用所建立的物件建立 requestcontext
物件。urlroutingmodule裡面有乙個routecollection屬性,其就是通過routetable.routes來實現賦值的。
public system.web.routing.routecollection routecollectionthis.routecollection.getroutedata(context)方法裡面最後又這麼幾句**。通過遍歷當前的routecollection來實現routedata的獲取,如果獲取到則立即返回。這裡其實遍歷的單個物件不是routebase而是route,而route繼承自routebase類,並且重寫了routebase的抽象函式getroutedata(為什麼這麼做,待研究?)。而路由匹配的實現也是在route類裡重寫的getroutedata方法。return this._routecollection;
}set
}
foreach (routebase base2 in this)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接收到請...