MVC系統學習1 MVC執行流程

2022-03-31 04:18:12 字數 3147 閱讀 6876

用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

//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}

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

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

private void addvalues(object values)

//然後填充到字典裡面

foreach (propertydescriptor descriptor in typedescriptor.getproperties(values))}}

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

routetable

集合中第乙個匹配的 route

物件來建立 routedata

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

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

public system.web.routing.routecollection routecollection

return this._routecollection;

}set

}

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

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接收到請...