對于Orchard來說,個人以為要真正理解Orchard,必須理解其路由工作方式。一、Orchard的自定義路由由三種類型組成1、分發類: HubRoute:其功能是按租戶篩選出當前訪問租戶的路由2、容器類: shellRoute:其功能是按當前租戶路由,如果此時沒有其它路由,路由數據處理后,交由MVC的路由處理3、插件類: 主要是: AliasRoute ,其主要功能是處理別名路由,當然其功能不僅如此。別名路由(如將:locahost/thisisolditem,變成locahost/i)通過保存在數據庫中對照表AliasRecord來工作,此類由Orchard.Alias.Routes加入到路由描述中,在Orchard_Alias_AliasRecord表中查找是否有別名路由存在。不論如何路由,最后都會交由標準的MVC路由管理二、Orchard通過對IRoutePRovider接口掃描,獲取了一組關于RouteDescriptor的列表,并通過RoutePublisher類Publish方法將所有描述轉換為租戶路由 1、按 RouteDescriptor 的先級排列路由; 2、加入合理的域; 3、根據描述生成ShellRoute類型的路由; 4、第3步中,如果有插件路由,則ShellRoute類路由將其包裝(圖2); 5、將ShellRoute類路由包裝在HubRoute類路由中,即除原如路由(MVC原生路由),其它路由均包裝進了 HubRoute; 6、是后形成的可能是(插件類不一定啟用)如下: HubRoute(shellRoute(AliasRoute(MvcRouteHandler)));三、由第二條及多租戶運行時不難理解,Orchard訪問情形 1、用戶訪問; 2、創建Host如果還沒有的話; 3、形成租戶設置列表; 4、通過URL來判斷應該使用哪一個租戶設置; 5、根據當前租戶,使用HubRoute路由,篩選出當前租戶路由,進行匹配; 6、找到合適的控制器執行操作;
四、以下是運行期,真實的數據截圖
1、路由集合(可見所有路由均被HubRoute包裹)
2、shellRoute
新聞熱點
疑難解答