1

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

我怎样才能让控制器忽略博客 - 或以其他方式解决这个问题?

4

1 回答 1

0

简短的回答是这两个项目(博客和 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.csNoRoutePlayer.cs(并相应地重命名该类)并在那里进行上述更改(注释掉第 57 行)。
  2. 然后通过转到 Functions | 在 Composite C1 中注册这个新函数。C# 函数 | 复合 | 网络 | MvcPlayer 并在此处添加一个节点,使用现有的 Render 元素作为灵感。只需将“类型”名称设置为 NoRoutePlayer。

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

于 2013-10-24T17:58:47.200 回答