1

我在 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 构建逻辑以考虑默认路由模式?

4

2 回答 2

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”时,才会为虚拟路径构建选择该路由,希望这不太可能。我说这很恶心。

于 2010-12-04T15:31:47.097 回答
0

您可以使用帮助程序指定路线的名称RouteLink

<%: Html.RouteLink("link text", "Default", 
    new { action = "add", controller = "home" }) %>
于 2010-12-04T10:54:13.427 回答