.NET TIPS [ASP.NET MVC]ルート・パラメータに制約条件を追加するには?[3.5、4以降、C#、VB]山田 祥寛2010/07/29 |
|
|
ルーティングとは、リクエスト時のURIに応じて処理の受け渡し先(コントローラ)を決定すること、または、その仕組みのことだ。ASP.NET MVCでは、新規にプロジェクトを作成した時点で、すでにルーティングが有効になっており、最初のうちはルーティングを利用していることを意識すらしないかもしれない。また、デフォルトのルート(=ルーティングのための規則)だけでも、それなりにアプリケーションを構築できてしまうのも事実だ。
しかし、より使いやすいアプリケーションを構築するという意味では、エンド・ユーザーにとってより分かりやすく、かつ、シンプルなURLの設計は欠かせない。ASP.NET MVCを理解するうえで、ルーティング(ルート)の習得は避けて通れないものである。
ルーティングの基本について、「TIPS:[ASP.NET MVC]ルート定義を追加するには?」では、まずよくあるルート定義の基本を、いくつかの例とともに紹介した。例えば以下は、「/Article/YYYY/MM//DD」(YYYY/MM/DDは年月日)のようなアドレスにマッチするArticleルートを定義する例である(ルーティング先のRoute/Indexアクションのコードについては、前述のTIPSを参照していただきたい)。
|
||
URIパターンに{controller}、{action}を含まないArticleルートを定義するコード(上:Global.asax.cs、下:Global.asax.vb) |
このようにルート定義は、URIパターンと、ルート・パラメータのデフォルト値との組み合わせで表現するのが基本である。もっとも、用途によっては、パラメータ値をより制限したいと思う場合もあるかもしれない。
例えば、上のArticleルートでは{year}、{month}、{day}には年月日が指定されることを想定しているが、いまのままの設定では、以下のようなアドレスにもマッチしてしまう。
/Article/ABC/XYZ/12345 |
せめてこの場合であれば、{year}は4けた、{month}/{day}は1〜2けたの数値のみ受け付けるように制限しておくのが望ましいだろう。そのような場合に、MapRouteメソッドでは第3引数として制約条件を設定することが可能だ。
例えば、以下は先ほどのArticleルートのパラメータに対して、
- {year}は数値4けた
- {month}、{day}は数値2けた
という制約条件を追加した例である(追記部分は太字で表している)。
|
||
ルート・パラメータに制約条件を設定した例(上:Global.asax.cs、下:Global.asax.vb) |
制約条件は、「パラメータ名 = パラメータ値にマッチする条件(正規表現)」からなる匿名型として指定できる。「\d」は任意の数値を表すメタ文字である。
なお、余談ではあるが、C#で正規表現パターンを指定する場合には、文字列リテラルは文字列の先頭に@を付けて「@"……"」(逐語的リテラル文字列)として指定するのが望ましい。通常の「"……"」(標準リテラル文字列)では、文字列に含まれる「\xx」がC#のエスケープ・シーケンスとして解釈されてしまうためだ。
さて、この状態でもう一度、以下のようなアドレスでアクセスしてみよう。
/Article/ABC/XYZ/12345 |
今度は、いずれのアドレスもArticleルートにはマッチしないことが確認できる。これによって、より精度の高い(想定したパラメータにのみマッチする)ルートを定義できるようになった。
利用可能バージョン:.NET Framework 3.5 利用可能バージョン:.NET Framework 4 カテゴリ: ASP.NET MVC 処理対象:ルーティング 関連TIPS:[ASP.NET MVC]ルート定義を追加するには? |
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|