.NET TIPS [ASP.NET MVC]特定のルートを無効化するには?[3.5、4、C#、VB]山田 祥寛2010/07/15 |
![]() |
「TIPS:[ASP.NET MVC]ルート定義を追加するには?」では、ASP.NET MVCでさまざまなルート(=ルーティングのためのルール)を追加する方法について紹介した。もっとも、ルートは追加するばかりではない。特定のルート定義だけを無効化することも可能だ。
例えば、以下のようなルート定義を考えてみよう。
|
||
| Diaryルートを定義するためのコード(上:Global.asax.cs、下:Global.asax.vb) |
Diaryルートは、指定された年月日に対応する日記にアクセスすることを想定したルートである。このようなルート定義で、例えば2006年の日記(「/Diary/2006/〜」)へのアクセスだけを除外したい場合には、以下のようなコードを追記すればよい(追記部分は太字で表している)。
|
||
| 「Diary/2006/〜」へのルーティングを除外するコード(上:Global.asax.cs、下:Global.asax.vb) |
特定のURIパターンを除外するのは、IgnoreRouteメソッドの役割である。IgnoreRouteメソッドの構文は、以下のとおりだ。
|
|
| IgnoreRouteメソッドの構文 | |
| url:URIパターン。 |
この状態で、次のようなURLでアクセスした場合の結果は、以下のようになる。
http://localhost:8080/Diary/2006/12/04 |
![]() |
| サンプルの実行結果 |
| 「Diary/2006/〜」ではアクセスできない |
404 Not Foundエラーが返され、確かにルート定義が無効化されていることが確認できる。同じく「http://localhost:8080/Diary/2007/08/05」でアクセスしたときには、正しくページが表示されること(Diaryルートそのものは動作していること)も確認してみよう。
●IgnoreRouteメソッドの注意点
このように、IgnoreRouteメソッドの構文自体はごくシンプルなものであり、誤解のしようもない。しかし、その記述順序には要注意だ。試しに、IgnoreRouteメソッドをDiaryルート定義の「後方」に移動してみるとどうだろう。
今度は、先ほどは無効化されていた「http://localhost:8080/Diary/2006/06/25」のようなアドレスでも正しくアクセスできてしまうはずだ。これは、ASP.NET MVCがルーティングを行う際に、MapRoute/IgnoreRouteメソッドの記述順にマッチング処理を行うためだ。そのため、MapRouteメソッドで定義されたDiaryルートが先にマッチしてしまい、IgnoreRouteメソッドによる定義が認識されなくなってしまうのだ。IgnoreRouteメソッドは、無効化の対象となるルート定義(MapRouteメソッド)よりも先に記述しなければならない。
同様の理由から、MapRouteメソッドで複数のルートを定義する場合も注意が必要だ。繰り返しであるが、ASP.NET MVCではルートは定義(記述)された順番にマッチングを行う。従って、以下のようなルート定義は正しく動作しない。
(1) {controller}/{action}/{id} ({id}は任意)
(2)News/{category}
この場合、「/News/IT」のようなアドレスは(1)のルートにマッチしてしまうため、(2)には永遠に行き着くことがないためだ。ルートを定義する場合には、
特殊なルートをより先に、汎用的なルートは最後に
| 利用可能バージョン:.NET Framework 3.5 利用可能バージョン:.NET Framework 4 カテゴリ: ASP.NET MVC 処理対象:ルーティング 関連TIPS:[ASP.NET MVC]ルート定義を追加するには? |
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



