.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」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|