MVC中的擴充套件點 一 路由系統簡介

2021-07-11 07:53:30 字數 2274 閱讀 3529

之所以說mvc框架很靈活,在於其擴充套件性很強,幾乎在請求處理管道的任何乙個節點都可以擴充套件。本系列文章將會對擴充套件點進行總結整理,以此增強對mvc框架的了解。

mvc是建立在路由系統之上的,所以嚴格上講,路由系統並不屬於mvc框架,路由系統是.net framework 3.5 sp1新增的內容,位於system.web.routing命名空間。

下面為asp.net mvc請求處理管道示意圖(注:**於steven sanderson所著《pro asp.net mvc framework》一書):

當iis接收到乙個請求後,將按以下步驟進行處理:

1、iis根據檔案型別將請求轉交給相應的處理程式,如果屬於asp.net檔案,則將請求**給aspnet_isapi.dll。(注:在ii6和iis7上的處理方式是有區別的)

2、 http處理模組urlroutingmodule接收到請求後,迴圈呼叫其routecollection集合中的routebase物件,找出匹配的routebase。

3、根據匹配的routebase物件返回的rouedata物件,獲取routehandler。

4、routehandler返回乙個http處理程式(ihttphandler),最終通過此處理程式處理請求,生成應答內容。

5.、如果routehandler為mvcroutehandler,並且其返回的http處理程式為mvchandler,則進入到mvc框架,mvchandler物件負責呼叫適當的控制器和活動方法,生成應答內容。

從上面步驟中可以看出,只有到第五個步驟後才真正進入到mvc框架,在此之前都是在asp.net的路由系統中。下面介紹這些步驟中涉及到的型別:

1、urlroutingmodule類

此類事路由系統的核心類,其主要功能是根據請求上下文找出合適的routebase物件。屬性routecollection是乙個routebase物件集合,urlroutingmodule接收到請求後,迴圈routecollection集合中的routebase物件,呼叫其getroutedata方法,如果該方法返回的routedata物件不為null,則終止迴圈,將routedata物件存入requestcontext。然後根據routedata的routehandler獲取合適的ihttphandler處理程式。

urlroutingmodule實際上是乙個asp.net的http 處理模組,所以它通過配置檔案的配置節點來新增的。

2、routetable類

用於儲存應用程式的路由集合,靜態屬性routes返回應用程式的路由集合,它實際等同於urlroutingmodule的routecollection屬性。通過routetable.routes.add方法可以新增自定義的routebase物件。

3、routebase類

表示乙個asp.net路由的基類,所有的路由都應該繼承自此類。

getroutedata方法檢查傳入的httpcontextbase資訊是否符合路由規則,符合則返回乙個routedata物件,不符合則返回null,此方法由urlroutingmodule類在迴圈routetable.routes集合時呼叫。

getvirtualpath方法根據路由資料生成相應的url。

4、route類

是routebase的乙個實現,主要新增了幾個屬性:

constraints: 對url的約束條件

datatokens:傳遞到路由處理程式的自定義值

defaults:url不包含指定引數時得預設值

routehandler:乙個路由處理程式(iroutehandler)

5、iroutehandler介面

路由處理程式介面,包含乙個gethttphandler方法,用於返回乙個ihttphandler處理程式物件。

6、mvcroutehandler類

mvc框架實現的乙個路由處理程式,其gethttphandler方法返回乙個mvchandler物件

7、mvchandler

由mvcroutehandler返回,根據請求資訊,呼叫合適的控制器和方法,生成應答內容。

8、stoproutinghandler類

表示乙個「不處理url的路由處理類」

9、irouteconstraint介面

用於構建route.constraints屬性,表示乙個約束條件。match方法用於檢查url是否符合路由規則,符合返回true,否則false。

MVC中的擴充套件點 一 路由上的擴充套件

原文出處 一 routebase 前面我們知道,urlroutingmodule通過遍歷routetable.routes中的路由物件來獲取匹配的routedata,從而將請求 到相應的ihttphandler處理程式。routetable.routes是乙個routebase物件集合,可向集合中新...

MVC中的擴充套件點 一 路由系統簡介

之所以說mvc框架很靈活,在於其擴充套件性很強,幾乎在請求處理管道的任何乙個節點都可以擴充套件。本系列文章將會對擴充套件點進行總結整理,以此增強對mvc框架的了解。mvc是建立在路由系統之上的,所以嚴格上講,路由系統並不屬於mvc框架,路由系統是.net framework 3.5 sp1新增的內容...

一 路由器漏洞分類

漏洞分類 路由器是所有上網流量的管控裝置,是網路的公共出入口。若路由器被黑客控制,就意味著與網路有關的所有應用都可能被黑客控制。而黑客一般都可通過漏洞來取得對路由器的控制權。當前,家用路由器漏洞主要有4類,分別是 wi fi密碼破解漏洞 web漏洞 後門漏洞 緩衝區溢位漏洞 wi fi密碼破解漏洞 ...