我创建了一些自定义内容类型,其中包含路径部分,因此我的内容管理员可以编辑项目的slu ..我没有运气配置一个路由,使我自己的控制器能够为这些项目提供服务。
核心Routable模块中ItemController路径的路径优先级为10.我尝试制作一条利用IRouteConstraint的路由,类似于Blog模块实现我想做的事情,优先级较低但是仍然没有运气。
如果我使用/结束我的网址,则会激活我的自定义路由,因为它与我的内容项的路径不匹配。这不是一个理想的解决方案。我无法理解为什么它不会在属于Routable模块的路径之前发现我的自定义路线。
非常感谢任何帮助,非常感谢提前。
更新:
这是我的IRouteProvider实现中的GetRoutes方法:
public IEnumerable<RouteDescriptor> GetRoutes()
{
return new[] {
new RouteDescriptor
{
Priority = 0,
Route = new Route(
"Admin/Jugganort/{controller}/{action}/{id}",
new RouteValueDictionary {
{"area", "Jugganort"},
{"controller", "Area"},
{"action", "List"}
},
new RouteValueDictionary(),
new RouteValueDictionary {
{"area", "Jugganort"}
},
new MvcRouteHandler())
},
new RouteDescriptor
{
Priority = 9,
Route = new Route(
"{location}/{merchant}/{promotion}",
new RouteValueDictionary {
{"area", "Jugganort"},
{"controller", "Home"},
{"action", "Index"},
{"merchant", UrlParameter.Optional},
{"promotion", UrlParameter.Optional}
},
new RouteValueDictionary {
{ "location", _routeConstraint }
},
new RouteValueDictionary {
{"area", "Jugganort"}
},
new MvcRouteHandler())
}
};
}
_routeConstraint是IRouteConstraint的一个简单实现,它只为路径中的位置查找硬编码的“newcastle”值。
我对RoutePart的理解不正确吗?这些项目是否总是必须从Routable模块的ItemController中提供?用户可以选择替换渲染自定义形状吗?
果园论坛将是我的下一个电话。再次感谢您提供的任何帮助。
答案 0 :(得分:7)
您也可以通过自己的控制器提供这些项目。唯一需要的是一条可以到达控制器的路线。然后,您可以返回任何您想要的东西:)
您的网址似乎与其他路线匹配。如果您想覆盖默认路线并确保首先进行比较,则应指定更高的优先级(例如11)。 Orchard.Core.Routable.Routes中的catch-all路由的优先级为10,因此甚至可以捕获与您的路由匹配的URL。
您没有在第一条路线中为ID提供默认值 - 这也可能会造成问题。如果您未在URL中明确指定id,则不会匹配。
顺便说一句,区域是第一条路线中默认控制器的专有名称,还是只是一个错字?