asp.net的路由系統旨在通過注冊url模版與實體檔案之間的映射進而實作請求位址與檔案路徑之間的分離,但對于asp.net
mvc應用來說,請求的目标卻是定義在某個controller類型中的action方法。
為了實作針對目标controller和action的路由,asp.net
mvc在system.web.mvc.routecollectionextensions中針對routeconllection類型定義了一系列的擴充方法以實作檔案路徑無關的路由映射。其中的兩組方法,ignore用于注冊不需要進行路由的url模闆;mappageroute方法用于進行基于url模版的路由注冊。
對于asp.net
mvc來說,url路由系統對請求位址進行解析後生成的路由資料中必須包含目标controller的名稱。由于controller名稱僅僅對應着類型的名稱,但是激活controller執行個體的前提是我們能夠正确的解析出它的具體類型,是以在具有多個同名controller類型時,還需要用到命名空間。在調用mappageroute方法時可以通過字元串數組類型的參數namespace來指定一個命名空間的清單。對于注冊的命名空間,可以指定一個代表完整命名空間的字元串,也可以使用“*”作為通配符表示對命名空間相應的部分不作任何限制。
對于針對定義在某個controller中的某個action的請求,如果注冊的路由表與之比對,具體比對的路由對象的getroutedata方法被調用并傳回一個具體的routedata對象。對請求的位址進行解析得到的目标controller和action的名稱必須包含在該routedata的values屬性對應的routevaluedictionary對象中,其對應得key分别為“controller”和“action”;