如何在Orchard CMS中注册/调用默认项目控制器?

时间:2014-02-02 22:01:04

标签: orchardcms

我正试图了解Orchard CMS中多租户和路由的工作原理。

据我所知,当Orchard启动新的shell(租户)时,将加载该租户的所有活动模块,并且任何实现IRouteProvider的模块“发布”其路由。然后为每个路由添加ShellRoute,该路由仅匹配对该租户的主机名/后缀的请求。

然后MVC以正常方式处理请求(在RouteTable.Routes中查找匹配项)。

我无法弄清楚是如何调用默认的ItemController,因为我在源代码中找不到默认路由。另外我注意到在浏览主页时,id路由参数填充了主页内容项的参数,所以我假设在控制器被命中之前还有某种预处理?< / p>

1 个答案:

答案 0 :(得分:3)

默认IRouteProvider - Orchard.Mvc.Routes.StandardExtensionRouteProvider。它负责以{module}/{controller}/{action}/{id}格式向控制器注册默认路由。

是的,你是对的 - 正在进行一些预处理。简要说明:

  • 每个项永久链接(我们称之为别名)都映射到路径 指向负责显示它的动作。默认情况下 - Contents/Item/Display/{id}。这些映射保存在数据库中(AliasRecordActionRecord)。
  • 有一个特殊的Route实施 - AliasRoute。然后,为每个模块注册一次该路由,并处理与现有别名匹配的请求。这一切都发生在Orchard.Alias模块中。
  • 如果传入请求与任何别名匹配,则对AliasRoute.GetRouteData的调用将返回基础映射。这样ASP.NET MVC框架就知道要调用哪个动作。