- - PR -
ASP.NET ルーティングのactionを取得する方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-12-11 22:38
いつもお世話になります。
どっとねっとふぁんさんのページを参考にルーティングを実装しました。 http://dotnetfan.org/blogs/dotnetfanblog/archive/2008/09/18/2809.aspx http://localhost/site1/insert/ http://localhost/site1/update/ http://localhost/site1/delete/ のアクセスurlをすべて ~/edit.aspx に割り当てています。 http://localhost/site1/insert/1 のようにアクセスされたとき 1 を取得することはできましたが insert を取得するにはどのようにすればよろしいでしょうか? Request.RawUrl で /site1/insert/ を取得して Request.ApplicationPath で取得した /site1 をとの差分から insert を判断するのが常套手段でしょうか? 良い方法がありましたら、ご教授お願いいたします。 |
|
投稿日時: 2008-12-12 09:57
ルーティングの定義をどう記述してます?
RouteTable.Routes.Add(new Route("{action}/{id}", new SimpleRouteHandler() { VirtualPath = "~/edit.aspx" })); もし、上記のように定義しているのであれば、 SimpleRouteValue.GetRequiredString("action"); でactionの値が取れるはず。。。 #たぶんそういう実装になってると思うけど、違ったかな(w |
|
投稿日時: 2008-12-12 21:37
どっとねっとふぁん さま
直々にご返答ありがとうございます。 ルーティングの定義は RouteTable.Routes.Add(new Route("insert/{id}", new SimpleRouteHandler() { VirtualPath = "~/edit.aspx" })); RouteTable.Routes.Add(new Route("update/{id}", new SimpleRouteHandler() { VirtualPath = "~/edit.aspx" })); RouteTable.Routes.Add(new Route("delete/{id}", new SimpleRouteHandler() { VirtualPath = "~/edit.aspx" })); のようになっております。 RouteTable.Routes.Add(new Route("{action}/{id}", new SimpleRouteHandler() { VirtualPath = "~/edit.aspx" })); と定義すればactionの値がとれるのですが http://localhost/site1/insert/ http://localhost/site1/update/ http://localhost/site1/delete/ 以外に http://localhost/site1/abc/ とアクセスされたときも edit.aspx に遷移してしまします。 insert、update、deleteのときだけ edit.aspx に遷移させて actionの値を取得することは可能でしょうか? |
|
投稿日時: 2008-12-15 11:17
abcにアクセスされたときはどういう動きになればよいのでしょう?
その動きに合わせた設定をあらかじめ入れてしまう、というのが一つの手としてあると思います。 あとはリクエストで受け取ったURLを解析する方法をとるか、ですね。 解析の仕方としては、差分からとるのもありでしょうけど、insert、update、deleteを定義しているので、その3つのうちのどれにあてはまるか、といった形の解析でもいいように思います。 |
|
投稿日時: 2008-12-15 17:42
ああ、しばらくさわってなかったんで忘れてた。
Constraintsを設定して使うことが可能です。 具体的には以下のように定義します。 RouteTable.Routes.Add( new Route("{action}/{id}", null, new RouteValueDictionary(new { action = "insert|update|delete" }), new SimpleRouteHandler() { VirtualPath = "~/edit.aspx" })); これで、3番目の引数に設定したinsert、update、deleteという文字列以外のもの、たとえばabcに対しては404エラーが発生するようになります。 なお、2番目の引数(上記ではnull)のところに適切に値を設定すると、idのデフォルト値を設定することができます。 このあたりはRouteTable.Routes.Addメソッドの取り得る引数をいろいろ調べてみてください。 |
1