初期のRoutingとしてGlobal.asaxに以下のRouteが登録されている。
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に次のコードを追加すればよい。
routes.MapRoute( "CategoryWithPage", "Clip/Category/{nameKey}/{time}/{page}", new { controller = "Clip", action = "Category", time = "week", page = 1 } );
そしてClipControllerの記述は下記のようになる。
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 件のコメント:
コメントを投稿