初期のRoutingとしてGlobal.asaxに以下のRouteが登録されている。
1 2 3 4 5 | routes.MapRoute( "Default" , "{controller}/{action}/{id}" , new { controller = "Home" , action = "Index" , id = "" } ); |
MapRouteメソッドの第二パラメータに注目して欲しい。これは下記のようなリクエストを想定している。
http://www.my-clip.net/Clip/Edit/2
ClipControllerのEditメソッド、Id=2というリクエストになる。ちなみに複数パラメータを渡す場合はどのようなURLになるかというのは前回説明した通りだ。では、複数のパラメータを渡す場合に下記のようにするにはどうしたらよいだろうか。
http://www.my-clip.net/Clip/Category/futsal/week/2
Global.asaxに次のコードを追加すればよい。
1 2 3 4 5 6 7 8 | routes.MapRoute( "CategoryWithPage" , "Clip/Category/{nameKey}/{time}/{page}" , new { controller = "Clip" , action = "Category" , time = "week" , page = 1 } ); |
そしてClipControllerの記述は下記のようになる。
1 2 3 4 5 6 7 | public ActionResult Category( string time, string nameKey, int page) { // Code here... } |
これで読みやすいURLをユーザーに提供することができる。次の二つのURLを比べれば後者のほうが理解しやすいのは一目瞭然だろう。
http://www.my-clip.net/Clip/Category?nameKey=futsal&time=week&page=2
http://www.my-clip.net/Clip/Category/futsal/week/2
ちなみにMapRouteメソッドの第三パラメータはデフォルト値なので、http://www.my-clip.net/というようにController、Action部分が省略されてリクエストされた場合は第三パラメータが使われる。なのでhttp://www.my-clip.net/はhttp://www.my-clip.net/Home/Index/と等価だ。
0 件のコメント:
コメントを投稿