嵌入式路由处理程序中的Html.ActionLink和RedirectToAction不正确

时间:2014-01-17 10:54:52

标签: c# asp.net-mvc asp.net-mvc-4

为了允许在多个Web项目之间共享公共资源和视图,我已经组装了一个包含这些布局的DLL,等等。为了实现这一点,我有一个路由处理程序,它查找以Embedded/开头的任何Uri并转到要处理的自定义处理程序。这一切都运作良好,并且如此注册:

    RouteTable.Routes.Insert(0,
            new Route("Embedded/{*file}",
                new RouteValueDictionary(new { }),
                new RouteValueDictionary(new { }),
                new EmbeddedResourceRouteHandler()));

然而,当它使用ActionLinkRedirectToAction时,它会中断。对后者进行调试后,我的Embedded/路由被选中作为要使用的路由,因此我得到{controller}/{action}的最终结果,而不是Embedded?controller={controller}&action={action}

该行是:

ActionResult result = RedirectToAction("Expired", "Operations");

正如您在下图中所看到的,这就是路由表的样子。请注意,我的嵌入式首先是:

enter image description here

由此产生的Uri是:

enter image description here

我尝试将嵌入式路由处理程序添加为 last 路由处理程序,但随后永远不会被调用。希望得到一些指导,如果您需要更多信息,请告诉我!提前谢谢。

1 个答案:

答案 0 :(得分:1)

一个想法可能是将约束应用于其他路由(包括默认路由)并将Embedded放在路由表的最末端。约束的示例:

routes.MapRoute(
    "Default",                                              
    "{controller}/{action}/{id}",                           
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new { controller = "^(?!Embedded).+"}
);