|
.NET TIPS [ASP.NET MVC]特定のHTTPメソッドにマッチするルートを定義するには?[3.5、4以降、C#、VB]山田 祥寛2010/08/05 |
![]() |
|
|
|
「TIPS:[ASP.NET MVC]ルート・パラメータに制約条件を追加するには?」では、ルート・パラメータの値に対して制約条件を課す方法について解説した。ルート・パラメータに対して制約条件を追加することで、より精度の高いルートを定義できるようになる。
もっとも、制約条件を課すことができるのは、何も個々のパラメータに対してだけではない。ルートそのものに対して制約条件を課すことも可能だ。
例えば、以下は先述のTIPSで定義したArticleルートに対して、HTTP GETメソッドで要求があった場合にのみマッチするよう制約条件を追加する例である(追記部分は太字で表している)。
|
||
| HTTP GETメソッドによる要求にのみマッチするArticleルートを定義するコード(上:Global.asax.cs、下:Global.asax.vb) |
ルートそのものに対する制約条件も、MapRouteメソッドの第3引数に匿名型として定義できる。ただし、その形式は(「パラメータ名 = 正規表現パターン」ではなく)、
キー名 = IRouteConstraint実装クラスのインスタンス
である必要がある。キー名は、ほかのパラメータ名と重複しない限り、任意の文字列を指定すればよい。
IRouteConstraintインターフェイス(System.Web.Routing名前空間)は、リクエスト情報が制約に対して妥当であるかを判定するための機能を定義したインターフェイスである。ここでは、IRouteConstraint実装クラスとして、HTTPメソッドをキーにリクエストを制約するためのHttpMethodConstraintクラス(System.Web.Routing名前空間)を指定している。
HttpMethodConstraintクラスのコンストラクタの構文は、以下のとおりだ。
|
|
| HttpMethodConstraintクラスの構文(C#) | |
| allowedMethods:有効なHTTPメソッド。 |
上の例では、引数allowedMethodsに「"GET"」を指定しているので、ArticleルートはHTTP GETメソッドに対してのみ適用されることになる。
セレクタ属性であるHttpVerbs属性にも似ているが、HttpVerbs属性がアクション・メソッド単位でのマッチングを制約するのに対して、HttpMethodConstraintクラスはルート全体を制約する点が異なる。当該のルートで最初から特定のHTTPメソッドしか使われないことが分かっているならば、HttpMethodConstraintクラスで制約を課した方がシンプルだろう。
なお、ここではHTTP GETでのアクセスのみを許可しているが、もしもGET、POSTによるリクエストを許可したいならば、以下のように必要なHTTPメソッドを列挙すればよい(C#の場合)。
|
|
| 複数のHTTPメソッドを指定する例 |
.NET Framework 4の時点で、標準で提供されているIRouteConstraint実装クラスは、HttpMethodConstraintクラスだけである。そのほか、ルートそのものに関する制約を設定したい場合には、自分でIRouteConstraint実装クラスを定義する必要がある。自作の制約条件を定義する方法については、後日「TIPS:[ASP.NET MVC]有効期限のあるルーティング規則を定義するには?」で解説する予定である。![]()
| 利用可能バージョン:.NET Framework 3.5 利用可能バージョン:.NET Framework 4 カテゴリ:ASP.NET MVC 処理対象:ルーティング 関連TIPS:[ASP.NET MVC]ルート・パラメータに制約条件を追加するには? 使用ライブラリ:IRouteConstraintインターフェイス(System.Web.Routing名前空間) 使用ライブラリ:HttpMethodConstraintクラス(System.Web.Routing名前空間) |
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


