Orchardcms 如何在Orchard CMS中注册/调用默认项目控制器?
我试图弄清楚Orchard CMS中的多租户和路由是如何工作的 据我所知,当Orchard启动一个新的shell(租户)时,该租户的所有活动模块都会被加载,任何实现Orchardcms 如何在Orchard CMS中注册/调用默认项目控制器?,orchardcms,Orchardcms,我试图弄清楚Orchard CMS中的多租户和路由是如何工作的 据我所知,当Orchard启动一个新的shell(租户)时,该租户的所有活动模块都会被加载,任何实现IRouteProvider的模块都会“发布”它们的路由。然后为每个路由添加一个ShellRoute,该路由将仅与向该租户的主机名/后缀发出的请求相匹配 然后,MVC以正常方式处理请求(在RouteTable.Routes中查找匹配项) 我不明白的是默认的ItemController是如何调用的,因为我在源代码中找不到默认的路由。我还
IRouteProvider
的模块都会“发布”它们的路由。然后为每个路由添加一个ShellRoute
,该路由将仅与向该租户的主机名/后缀发出的请求相匹配
然后,MVC以正常方式处理请求(在RouteTable.Routes
中查找匹配项)
我不明白的是默认的
ItemController
是如何调用的,因为我在源代码中找不到默认的路由。我还注意到,在浏览主页时,id
route参数填充了主页内容项的参数,因此我假设在点击控制器之前会进行某种预处理?有一个默认的IRouteProvider
-Orchard.Mvc.Routes.StandardExtensionRouteProvider
。它负责以{module}/{controller}/{action}/{id}
的形式注册到控制器的默认路由
是的,你是对的,正在进行一些预处理。简要说明:
- 每个项目permalink(我们称之为别名)都映射到一个路由
它指向负责显示它的操作。默认情况下-
。这些映射保存在数据库中(Contents/Item/Display/{id}
和AliasRecord
)ActionRecord
- 有一个特殊的
实现-路由
。然后为每个模块注册一次此路由,并处理与现有别名匹配的请求。这一切都发生在别名路由
模块中Orchard.Alias
- 如果传入请求与任何别名匹配,则对
AliasRoute.GetRouteData的调用将返回基础映射。这样ASP.NET MVC框架就知道要调用哪个操作