自定义IROUTEHANDLER路线拧紧MVC链接建筑物
-
08-10-2019 - |
题
我在ASP.NET MVC2中有一个自定义的RouteHandler,可以在这样的前缀路径上捕获所有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构建逻辑以考虑默认路由模式?
解决方案
我想出了一个黑客来停止所描述的行为。虽然这“解决”了问题,但确实有点讨厌,我更喜欢一种清洁的方式来排除虚拟路径构建逻辑的路线
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”的情况下,仅供虚拟路径构建路线,希望这不太可能。我说这很讨厌。
其他提示
您可以使用 RouteLink
帮手:
<%: Html.RouteLink("link text", "Default",
new { action = "add", controller = "home" }) %>
不隶属于 StackOverflow