复合C1 - MVC播放器与Blog模块冲突

时间:2013-10-10 12:13:11

标签: c1-cms

我有一个复合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控制器正在尝试路由博客页面,因为它认为它们不存在&无法找到控制器。

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

1 个答案:

答案 0 :(得分:0)

简短回答是两个项目(博客和mvc播放器)都在争夺您网址的路径部分。他们都希望自己拥有路径来做路由。

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

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

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

  1. 将MVC Player中的功能移至另一个功能提供程序,如Razor Functions
  2. 更改MVC播放器,使其不会将路径信息传递给您的MVC控制器。
  3. 通过编辑~/App_Code/Composite/AspNet/MvcPlayer/Player.cs并注释掉这一行(第57行),可以快速完成第二种解决方法

    Path = PathInfo;
    

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

    要创建一个新的替代MvcPlayer,它不依赖于路由(保留原始的完整),请执行以下操作:

    1. Player.cs复制到NoRoutePlayer.cs(并相应地重命名该类)并在那里进行上述更改(注释第57行)。
    2. 然后转到Functions |,在Composite C1中注册这个新函数C#函数|复合| AspNet | MvcPlayer并在此处添加节点,使用现有的Render元素作为灵感。只需将“类型”名称设置为NoRoutePlayer即可。
    3. 通过该更改,您将拥有一个播放器功能和一个NonRoutingPlayer功能,然后您可以使用后者来运行您的MVC控制器,每个人都应该相处得很好:)