我在ASP.NET MVC2中有一个自定义路由处理程序来捕获所有URL的前缀路径:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new Route("@api/{*all}", new ApiHandler()));
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
路由工作正常,但如果我使用Html.Actionlink或从控制器返回ReturnToAction(),uri构建会创建一个像这样的破坏的URI:
/@api?action=Add&controller=Home
而不是
/Home/Add
如何影响uri构建逻辑以考虑默认路由模式?
答案 0 :(得分:1)
我想出了一个黑客来阻止所描述的行为。虽然这“解决了”这个问题,但它真的很讨厌,我更喜欢用更简洁的方法从虚拟路径构建逻辑中排除路径
routes.Add(
new Route("@api/{*all}",
// A random and unlikely controller name as the default
new RouteValueDictionary() { { "controller", "qwewqewqeqweq" } },
// and a constraint requiring any controller to be that random, default value
new RouteValueDictionary() { { "controller", "qwewqewqeqweq" } },
new ApiHandler()
);
这意味着只有当有问题的控制器是“qwewqewqeqweq”时,才会为虚拟路径构建选择路由,这种情况很可能无法实现。我说这很讨厌。
答案 1 :(得分:0)
您可以使用RouteLink
帮助程序指定路径名称:
<%: Html.RouteLink("link text", "Default",
new { action = "add", controller = "home" }) %>