MVC3でのルーティングに頭を悩ませています。
以前、私は通常、領域全体を避け、醜い古い?id=1&foo=bar
タイプのURLに固執していました。よくない。
このように定義された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
}
3番目のルートを使用して、のようなURLを生成することを期待します/foo/barX/3
。
しかし、私が使用する場合
@Html.ActionLink("TEST1", "barX", "foo", new { id = 3 }, null)
生成されるURLは
/foo/barx?id=3
同様に、のために生成されたURL
@Html.ActionLink("TEST2", "barY", "foo", new { title = "test" }, null)
は
/foo/bary?title=test
だから私の質問は、なぜ彼らは古い?id=
構文ではなく古い構文でURLを生成するのかということだと思います/foo/barx/3
。