[ASP.NET MVC] 正規表現で URL ルーティングを設定する
ASP.NET MVC でのルート定義について、様々なパターンを紹介している。
ハマりやすいポイントは、URL ルーティングは登録順に判断されるので、汎用的な定義を一番初めに定義してしまうと、それにマッチしてしまい、以降の定義はすべて無視されてしまう。
また、パラメータに正規表現で制約をかけるときには注意?が必要 (msdn の記事にて触れている) 。
URL リライトの時点で弾くか、プログラム内でパラメータをチェックするのかは実装方法によって様々だろうが、URL リライトで弾く場合は、エラー画面に飛ぶということは覚えておかなければならない。
なお、ASP.NET WEbフォームを使ったアプリケーションでも、ASP.NET 4.0 から URL のルーティングがサポートされている。
Web フォームの場合でも、URL 自体はルーティングしたものとなるが、実際には該当するページにポストバックを行っている。
ハマりやすいポイントは、URL ルーティングは登録順に判断されるので、汎用的な定義を一番初めに定義してしまうと、それにマッチしてしまい、以降の定義はすべて無視されてしまう。
また、パラメータに正規表現で制約をかけるときには注意?が必要 (msdn の記事にて触れている) 。
routes.MapRoute( "Reports", "Reports/{id}", new { controller = "Reports", action = "Details", id = @"\d{4}" } );4 ケタの数値という制限を付けようとしても、これでは駄目である。正規表現は、MapRoute の第 4 引数で定義しなければならない。
routes.MapRoute( "Reports", "Reports/{id}", new { controller = "Reports", action = "Details" }, new { id = @"\d{4}" } );これで OK なのだが、実際にこの制約以外のアクセスをたたくと、エラーが発生する。
URL リライトの時点で弾くか、プログラム内でパラメータをチェックするのかは実装方法によって様々だろうが、URL リライトで弾く場合は、エラー画面に飛ぶということは覚えておかなければならない。
なお、ASP.NET WEbフォームを使ったアプリケーションでも、ASP.NET 4.0 から URL のルーティングがサポートされている。
Web フォームの場合でも、URL 自体はルーティングしたものとなるが、実際には該当するページにポストバックを行っている。