ASP.NET MVC 的 Piranha CMS 路由问题

Posted

技术标签:

【中文标题】ASP.NET MVC 的 Piranha CMS 路由问题【英文标题】:Piranha CMS routing issue with ASP.NET MVC 【发布时间】:2014-04-14 11:49:51 【问题描述】:

我正在尝试将 Piranha CMS (v2.2.0) 与现有的 ASP.NET MVC 应用程序集成。我可以运行所有原始应用程序页面和 CMS 管理器页面。我还可以查看由 CMS 管理的页面草稿,但是当我尝试查看从 CMS 托管的实时页面版本时,我收到 HTTP 404“找不到资源”消息。

所以以下草稿网址有效:

http://localhost:5316/draft/start

但以下实时网址失败:

http://localhost:5316/home/start

原始应用程序确实有一个“Home”控制器,我尝试将其重命名为“Test”,以防出现冲突问题。我可以看到新的“测试”定位内容,但 /home/start url 仍然失败。

按照建议,我的 RouteConfig 代码是:

routes.MapRoute(
    name: "Default",
    url: "controller/action/id",
    defaults: new  controller = "Home", action = "Index", id = UrlParameter.Optional ,
    namespaces: new[]  "Maps.Portal.Controllers" 
).DataTokens["UseNamespaceFallback"] = false;

我的 web.config 设置是:

<settings>
  <managerNamespaces value="" />
  <disableManager value="false" />
  <passiveMode value="true" />
  <prefixlessPermalinks value="false" />
</settings>

我尝试将 prefixlessPermalinks 设置为 true,但这没有帮助。

我猜 Piranha CMS 没有捕捉到自己托管的页面的路由?有什么想法吗?

【问题讨论】:

【参考方案1】:

通过查看您的配置,我可以看到您已遵循为现有项目设置 Piranha CMS 的指南,将 passiveMode 设置为 true。让我澄清一下这个参数的作用。

被动模式用于您希望将 Piranha CMS 用作后端内容存储而不处理任何路由的应用程序。这意味着此参数有效地关闭了系统中所有指向永久链接的 url,以免干扰应用程序的现有路由。

如果您想将现有的应用程序控制器与仅由 Piranha CMS 生成的页面混合,您必须将 passiveMode 设置为 false,这将使永久链接的路由再次处于活动状态。

完成此操作后,您将能够访问带有或不带有无前缀永久链接的页面。

问候

哈坎

【讨论】:

感谢 Håkan - 非常感谢。我确定我已经尝试过了,但又试了一次,效果很好。我想我可能因为与我自己的 Home 控制器发生冲突而尝试过并被拒绝了。我还将 prefixlessPermalinks 设置为 true,这使我可以继续使用现有的 Home 控制器,而不会与 CMS 发生冲突。 @Hakan 可能值得在您的文档中澄清这一点 - 而不是说 You should also set the Piranha CMS Web.config setting passiveMode to true. ,建议人们对于新应用程序不要理会此设置

以上是关于ASP.NET MVC 的 Piranha CMS 路由问题的主要内容,如果未能解决你的问题,请参考以下文章

现有 MVC 5 站点上的 Piranha CMS

显示块的 Piranha CMS MVC 标签问题

piranha CMS 的 Sysparam 错误

在 ASP.NET MVC 中构建 CMS

在 Piranha CMS 中访问全球站点区域

来自 ASP.NET MVC CMS 数据库的动态路由