初期の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 件のコメント:
コメントを投稿