首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DD4T默认路由不起作用

DD4T默认路由不起作用
EN

Stack Overflow用户
提问于 2012-10-31 20:40:17
回答 5查看 688关注 0票数 5

我在SDLTridion2011和ASP.NET MVC4中使用DD4T框架

这是我的路由表

代码语言:javascript
复制
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        // Route for SDL Tridion UI 2011 (Aka !SiteEdit)
        routes.MapRoute(
            "SiteEditBlankPage",
            "se_blank.html",
            new { controller = "Empty", action = "Index" });

        routes.MapRoute(
            null, // Route name
            "xml/{*PageId}", // URL with parameters
            new { controller = "Page", action = "Xml" }, // Parameter defaults
           new { pageId = @"^(.*)?$" } // Parameter constraints
        );

        // Tridion page route
        routes.MapRoute(
           "TridionPage",
           "{*PageId}",
           new { controller = "Page", action = "Page" }, // Parameter defaults
           new { pageId = @"^(.*)?$" } // Parameter constraints
        );

        routes.MapRoute(
            null, // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
    }

我曾尝试将默认路由移动到Tridion上,但随后Tridion页面得到404s。

让它工作的唯一方法似乎是有一个特定的路由到我的控制器,例如:

代码语言:javascript
复制
        routes.MapRoute(
           null, // Route name
           "MyController/{action}/{id}", // URL with parameters
           new { controller = "MyController", action = "Index", id = UrlParameter.Optional } // Parameter defaults
       );

有谁有什么想法吗?因为上面的解决方案并不理想。

(我的web.config中没有任何UI 2012配置)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-10-31 22:02:56

AFAICS有几个选项:

  1. 如果你能从一个‘普通’的url (扩展名、起始路径等)中识别出一个Tridion,你可以通过调整TridionPage路由来解决这个问题。但我认为这不适合您,因为如果您能够识别Tridion url和普通url,您就已经想出了这个解决方案;)
  2. 在TridionPage路由上实现了一个路由约束。如果请求的url在代理中,请检查此routeconstraint。如果为true:返回true,否则返回false。如果它返回false,则下一个(匹配的)路由将处理该请求。不过,对性能不确定。
  3. 您自己的选项:正常页面的特定路径。

我肯定我错过了一些选择。希望其他人能在这里分享它们。

票数 7
EN

Stack Overflow用户

发布于 2012-10-31 22:27:46

正常的DD4T操作是让Tridion拥有PageController,即捕获所有URL并将它们传递给一个URL。这干扰了基于其名称的控制器/动作的自动路由,所以这些细节之一必须给出!

我个人喜欢Albert的第一个建议,因为它很简单。例如,仅将以'.html‘结尾的URL映射到Tridion。不幸的是,这会导致sg中的默认页面出现问题,因为无法识别"/sg“,即使在代理中可能有一个"/sg/index.html”。解决此问题的一些替代方法:

  • 为所有一级结构组(/news、/products等)配置显式路径
  • 将所有Tridion页面发布到站点的一个子部分,例如/content并将其映射到特定的路径
票数 6
EN

Stack Overflow用户

发布于 2012-10-31 21:26:51

我们只是在根目录中放置了一个页面se_blank.html,并确保它只部署到staging,这样它就在需要的地方,而不需要特定的路由。

当然,这并没有真正回答您的问题,但您可以考虑将其作为一种选择。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13158180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档