Asp.net mvc 4 DD4T默认路由不工作
我将DD4T框架与SDL Tridion 2011和ASP.NET MVC4一起使用 我有一些非DD4T控制器和视图,我想使用,但我得到了404错误,当我试图去这些网址 这是我的路线表Asp.net mvc 4 DD4T默认路由不工作,asp.net-mvc-4,tridion,tridion-2011,dd4t,Asp.net Mvc 4,Tridion,Tridion 2011,Dd4t,我将DD4T框架与SDL Tridion 2011和ASP.NET MVC4一起使用 我有一些非DD4T控制器和视图,我想使用,但我得到了404错误,当我试图去这些网址 这是我的路线表 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); // Route for SDL Tridi
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页面得到404
使其工作的唯一方法似乎是有一条到我的控制器的特定路线,例如:
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配置)我们只是在根目录中放置了一个页面se_blank.html,并确保它只部署到staging,因此它位于需要的位置,不需要特定的路由
当然,这并不是真的回答你的问题,但你可以认为这是一个选择。p> 也许您可以制作一个像TridionPage映射到控制器那样的全包映射,该映射将重定向到正确的控制器,并基于参数使用RedirectToAction函数执行操作
不确定这是否是您的理想解决方案。AFAIC有几个选项:
我肯定我错过了一些选择。希望有人在这里分享 正常的DD4T操作是让Tridion拥有URL,即捕获所有URL并将其传递给一个PageController。这会干扰基于其名称的控制器/操作的自动路由,因此必须给出其中一个细节 我个人喜欢阿尔伯特的第一个建议,因为它很简单。例如,仅将以“.html”结尾的URL映射到Tridion。不幸的是,这会导致SGs中的默认页面出现问题,因为无法识别“/sg”,即使代理中可能有“/sg/index.html”。解决这一问题的一些备选方案:
- 为所有一级结构组(/news、/products等)配置显式路由
- 将所有Tridion页面发布到网站的一个子部分,例如/内容,并将其映射到特定路线
routes.MapRoute(
"TridionPage",
"{PageId}",
new { controller = "Page", action = "Page" }, //parameter defaults
new { PageId = @"(?!mvc.)*" } // Parameter constraint: ignore PageId with '/'
);
//Default MVC route
routes.MapRoute(
"MVC", //Route name
"mvc/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional}
);
你所说的“正常控制器”是什么意思?我想是非dd4t控制器吧?谢谢,艾伯特。我想我现在可能不得不使用第三种解决方案!如果我想一个更好的方法,我会在这里更新。具体路线+1-这就是我们解决这个问题的方法。显然,你不必在url中有“MyController”!谢谢你,奎林。我不确定我是否能区分Tridion页面和“正常”操作,所以我想我将继续为我的控制器创建路由。那么结构组中的页面呢?它们肯定会包含斜杠吗?