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 自体はルーティングしたものとなるが、実際には該当するページにポストバックを行っている。
