我在SDLTridion2011和ASP.NET MVC4中使用DD4T框架
这是我的路由表
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。
让它工作的唯一方法似乎是有一个特定的路由到我的控制器,例如:
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配置)
发布于 2012-10-31 22:02:56
AFAICS有几个选项:
我肯定我错过了一些选择。希望其他人能在这里分享它们。
发布于 2012-10-31 22:27:46
正常的DD4T操作是让Tridion拥有PageController,即捕获所有URL并将它们传递给一个URL。这干扰了基于其名称的控制器/动作的自动路由,所以这些细节之一必须给出!
我个人喜欢Albert的第一个建议,因为它很简单。例如,仅将以'.html‘结尾的URL映射到Tridion。不幸的是,这会导致sg中的默认页面出现问题,因为无法识别"/sg“,即使在代理中可能有一个"/sg/index.html”。解决此问题的一些替代方法:
发布于 2012-10-31 21:26:51
我们只是在根目录中放置了一个页面se_blank.html,并确保它只部署到staging,这样它就在需要的地方,而不需要特定的路由。
当然,这并没有真正回答您的问题,但您可以考虑将其作为一种选择。
https://stackoverflow.com/questions/13158180
复制相似问题