之所以說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的路由處理類」疑惑 比如
mvc
在routecollection
型別上擴充套件了乙個ignoreroute
方法,用於指示路由系統忽略處理指定的url
。其實現方式是生成乙個route
物件,指定其routehandler
屬性為乙個stoproutinghandler
物件。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密碼破解漏洞 ...