我很努力地在MVC3中绕过路由。MVC3不同参数类型的路由
以前我一般只是回避整个区域,并坚持与丑陋的旧?id=1&foo=bar
类型的网址。不太好。
我有4个路由定义正是如此
routes.MapRoute("Blog", "{controller}/{action}/{PageNumber}/{PostsPerPage}", new { controller = "blog", action = "list", PageNumber = UrlParameter.Optional, PostsPerPage = UrlParameter.Optional });
routes.MapRoute("Code", "{controller}/{action}/{title}", new { });
routes.MapRoute("Id", "{controller}/{action}/{id}", new { });
routes.MapRoute("Default", "{controller}/{action}", new { controller = "home", action = "index" });
我试图将它们顺序从最具体到最不。
第一个'博客'路线工作正常,我可以使用一个URL,如/blog/list/2/5
,它正确映射到我的控制器。
底部的默认路由也按我的预期工作。
但是如果我有行动的方法是这样的:
public ActionResult BarX(int id)
{
//some stuff
}
public ActionResult BarY(string title)
{
//some stuff
}
我希望它使用第三路线和产生的URL像/foo/barX/3
。
然而,如果我用
@Html.ActionLink("TEST1", "barX", "foo", new { id = 3 }, null)
生成的URL是
/foo/barx?id=3
为
@Html.ActionLink("TEST2", "barY", "foo", new { title = "test" }, null)
同样生成的URL是
/foo/bary?title=test
所以我想我的问题是:为什么他们生成旧的?id=
语法的URL而不是/foo/barx/3
?
“您的所有路线基本相同。” +1 - 钉在头上。 – 2013-03-25 01:00:54