为了允许在多个Web项目之间共享公共资源和视图,我已经组装了一个包含这些布局的DLL,等等。为了实现这一点,我有一个路由处理程序,它查找以Embedded/
开头的任何Uri并转到要处理的自定义处理程序。这一切都运作良好,并且如此注册:
RouteTable.Routes.Insert(0,
new Route("Embedded/{*file}",
new RouteValueDictionary(new { }),
new RouteValueDictionary(new { }),
new EmbeddedResourceRouteHandler()));
然而,当它使用ActionLink
或RedirectToAction
时,它会中断。对后者进行调试后,我的Embedded/
路由被选中作为要使用的路由,因此我得到{controller}/{action}
的最终结果,而不是Embedded?controller={controller}&action={action}
。
该行是:
ActionResult result = RedirectToAction("Expired", "Operations");
正如您在下图中所看到的,这就是路由表的样子。请注意,我的嵌入式首先是:
由此产生的Uri是:
我尝试将嵌入式路由处理程序添加为 last 路由处理程序,但随后永远不会被调用。希望得到一些指导,如果您需要更多信息,请告诉我!提前谢谢。
答案 0 :(得分:1)
一个想法可能是将约束应用于其他路由(包括默认路由)并将Embedded放在路由表的最末端。约束的示例:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { controller = "^(?!Embedded).+"}
);