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

このブログの人気の投稿

Excel で入力した文字に勝手に取り消し線が入る

コピーした行の挿入が表示されない時はフィルタされていないかチェック