果园cms路由问题

Posted

技术标签:

【中文标题】果园cms路由问题【英文标题】:orchard cms routing question 【发布时间】:2011-09-23 11:54:00 【问题描述】:

我创建了一些包含路由部分的自定义内容类型,以便我的内容管理员可以编辑项目的 slug。我没有运气配置一条路线,使我自己的控制器能够为这些项目提供服务。

核心Routable模块中ItemController路径的路由优先级为10。我尝试制作一个利用IRouteConstraint的路由,类似于博客模块实现我想要做的事情,但优先级较低但仍然没有运气。

如果我让我的 URL 以 / 结尾,那么我的自定义路由将被激活,因为它与我的内容项的路径不匹配。这不是一个理想的解决方案。我不明白为什么它不会在属于可路由模块的路径之前发现我的自定义路径。

任何帮助将不胜感激,在此先感谢。

更新: 这是我的 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 的理解不正确吗?这些项目是否总是必须从可路由模块的 ItemController 中提供?让用户替代来呈现自定义形状是我唯一的选择吗?

果园论坛将是我的下一个呼叫点。再次感谢您提供的任何帮助。

【问题讨论】:

我可以帮助你,但我需要更多细节。您如何为每个内容项提供 slug、路线、路径、标题属性?如果您的问题只是最后的“/”,我很抱歉,但我认为您将不得不处理它。无论如何,您真的应该考虑在他们(官方果园团队成员)真正活跃的官方果园论坛上询问您的问题:orchard.codeplex.com/discussions 你能发布你的 RouteProvider.cs 吗? 【参考方案1】:

当然,您也可以通过自己的控制器提供这些项目。唯一需要的是可以到达您的控制器的路线。然后,你几乎可以返回任何你想要的东西:)

您的网址似乎正在与其他一些路由匹配。如果您想覆盖默认路由并确保首先比较您的路由,您应该指定 更高的优先级(例如 11)。 Orchard.Core.Routable.Routes 中的包罗万象的路由的优先级为 10,因此甚至会捕获与您的路由匹配的 URL。

您没有在第一条路由中为 id 提供默认值 - 这也会造成问题。如果您没有在 URL 中明确指定 id,它将不会被匹配。

顺便说一句,Area是第一个路由中默认控制器的正确名称,还是只是一个错字?

【讨论】:

感谢 pszmyd,但我的路线仍未激活,优先级为 11。例如,它将捕获 ~/newcastle/,但不会捕获 ~/newcastle,它是内容的 RoutePart.Path 值物品。我做错了什么吗?我确实有一个用于管理类型屏幕的 AreaController,您认为这不是一个好主意吗? 原来 15 是神奇的数字。如果设计器工具可以告诉您当前请求的服务路线,那就太好了。谢谢 pszmyd,也为你的博客提供了道具,我发现它非常有用。 @Brendan:路由调试是 Orchard 真正需要的东西。 orchard.codeplex.com/workitem/17287 有一张公开票 - 它获得的票数越多,实施的机会就越大。 @Pszmyd:您已经为几乎所有其他可以想象的东西编写了模块,为什么不这样做呢? :-p @Piotr 我遇到了同样的问题。我的路线正在运行,但它让我访问被拒绝错误。请帮助我。

以上是关于果园cms路由问题的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter - CMS 的最佳路由配置?

十月 CMS - 如何正确路由

ASP.NET MVC 的 Piranha CMS 路由问题

vue js中vue路由器的动态路由与strapi headless CMS - 路由器链接和href标签抛出错误

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

基于 JWT 的 API + Piranha CMS 劫持 [Authorize] 路由