【问题标题】:Composite C1 - MVC Player conflicting with Blog moduleComposite C1 - MVC 播放器与博客模块冲突
【发布时间】:2013-10-25 01:58:47
【问题描述】:

我有一个复合 C1 站点 - 工作正常。一些页面使用 MVC 播放器 - 可以正常工作 - 以及站点上的所有页面 - 除了会导致路由冲突的博客。

Error: The incoming request does not match any route.
C1 Function: Composite.AspNet.MvcPlayer.Render
Error details:
Exception has been thrown by the target of an invocation.
The incoming request does not match any route.

此错误出现在页面顶部-该错误下博客可以正常工作-我只需要摆脱导致此错误的原因即可。我猜 MVC 控制器正在尝试路由博客页面,因为它认为它们不存在并且找不到控制器。

如何让控制器忽略博客 - 或以其他方式解决此问题?

【问题讨论】:

    标签: c1-cms


    【解决方案1】:

    简短的回答是这两个项目(博客和 mvc 播放器)都在争夺 URL 的路径部分。他们都希望自己拥有进入位的路径来进行路由。

    例如:/en/Blog/2011/11/29/Chamonix-To-Courmayeur-Skiing-Day-Trips

    /en/Blog 部分将您路由到托管博客的页面,而其余部分是传递给您可能在页面上托管的任何功能的路径信息。由于路径是“一件事”,因此该字符串是用于博客功能还是 MVC 播放器功能没有区别。这就是造成混乱的原因。

    如果您希望按原样离开博客,您可以通过两种方式解决此问题:

    1. 将 MVC Player 中的功能移至其他功能提供程序,例如 Razor Functions
    2. 更改 MVC 播放器,使其不会将路径信息传递给您的 MVC 控制器。

    通过编辑 ~/App_Code/Composite/AspNet/MvcPlayer/Player.cs 并注释掉这一行(第 57 行),可以快速而肮脏地完成第二种解决方法

    Path = PathInfo;
    

    在您执行此操作之前,请注意这会影响您所有正在运行的 MvcPlayer 实例。

    要创建一个不依赖于路由的新替代 MvcPlayer(保持原来的不变),请执行以下操作:

    1. Player.cs 复制到NoRoutePlayer.cs(并相应地重命名类)并在那里进行上述更改(注释掉第57 行)。
    2. 然后通过转到函数 | 在复合 C1 中注册这个新函数。 C# 函数 |复合 |网络 | MvcPlayer 并在此处添加一个节点,使用现有的 Render 元素作为灵感。只需将“类型”名称设置为 NoRoutePlayer。

    通过该更改,您将拥有一个 Player 函数和一个 NonRoutingPlayer 函数,然后您可以使用后者来运行您的 MVC 控制器,每个人都应该相处得很好:)

    【讨论】:

    • 谢谢。网站上的大多数页面都需要 MVCPlayer - 但博客不需要它。我可以以某种方式从 MVC 播放器中排除 /en/blog 吗?
    • MVC 播放器仅在以某种方式主动添加到页面时才处于活动状态。直接在页面上或通过页面的模板。不让 MVC Player 运行最干净的方法是将其从页面中移除 - 例如通过创建一个不包含它的模板。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多