ルート制約を作成する (VB)
作成者: Stephen Walther
このチュートリアルでは、Stephen Walther が、正規表現を使用してルート制約を作成して、ブラウザー要求がルートと一致する方法を制御する方法を示します。
ルート制約を使用して、特定のルートに一致するブラウザー要求を制限します。 正規表現を使用してルート制約を指定できます。
たとえば、Global.asax ファイルのリスト 1 でルートを定義したとします。
リスト 1 - Global.asax.vb
routes.MapRoute( _
"Product", _
"Product/{productId}", _
New With {.controller = "Product", .action = "Details"} _
)
リスト 1 には、Product という名前のルートが含まれています。 Product ルートを使用して、ブラウザー要求をリスト 2 に含まれる ProductController にマップできます。
リスト 2 - Controllers\ProductController.vb
Public Class ProductController
Inherits System.Web.Mvc.Controller
Function Details(ByVal productId As Integer) As ActionResult
Return View()
End Function
End Class
Product コントローラーによって公開される Details() アクションは、productId という名前の単一のパラメータを受け入れることに注目してください。 このパラメータは整数パラメータです。
リスト 1 で定義されているルートは、次のいずれかの URL と一致します。
- /Product/23
- /Product/7
残念ながら、このルートは次の URL とも一致します。
- /Product/blah
- /Product/apple
Details() アクションは整数パラメータを想定しているため、整数値以外のものを含む要求を行うとエラーが発生します。 たとえば、ブラウザーに URL /Product/apple を入力すると、図 1 のエラー ページが表示されます。
図 01: エラー ページを示しています (クリックするとフルサイズの画像が表示されます)
実際に行いたいのは、適切な整数 productId を含む URL にのみ一致することです。 ルートを定義するときに制約を使用して、ルートに一致する URL を制限できます。 リスト 3 の変更された Product ルートには、整数にのみ一致する正規表現制約が含まれています。
リスト 3 - Global.asax.vb
routes.MapRoute( _
"Product", _
"Product/{productId}", _
New With {.controller = "Product", .action = "Details"}, _
New With {.productId = "\d+"} _
)
正規表現 \d+ は、1 つ以上の整数と一致します。 この制約により、Product ルートは次の URL と一致します。
- /Product/3
- /Product/8999
しかし、次の URL とは一致しません。
- /Product/apple
- /Product
これらのブラウザー要求は、別のルートによって処理されるか、一致するルートがない場合は、"リソースが見つかりませんでした" エラーが返されます。