我在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构建逻辑以考虑默认路由模式?
发布于 2010-12-04 23:31:47
我想出了一个方法来阻止所描述的行为。虽然这“解决”了问题,但它真的很糟糕,我更喜欢一种更简洁的方法,将路由排除在虚拟路径构建逻辑之外
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-04 18:54:13
您可以使用RouteLink助手指定路由的名称:
<%: Html.RouteLink("link text", "Default",
new { action = "add", controller = "home" }) %>https://stackoverflow.com/questions/4351415
复制相似问题