Pages

2012/05/09

[ASP.NET MVC] 正規表現で URL ルーティングを設定する

ASP.NET MVC でのルート定義について、様々なパターンを紹介している。
ハマりやすいポイントは、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 自体はルーティングしたものとなるが、実際には該当するページにポストバックを行っている。
Related Posts Plugin for WordPress, Blogger...