ASP.NET MVCのルート制限

ASP.NET MVCの拡張性で本当に便利なことの1つは、制限を課し、ルートに独自の制限を作成する機能です。 ルート制限を追加する(可能な場合)のは良い習慣だと思う傾向があります。 なぜ、無効なルート値がアプリケーションに渡されるとき、ASP.NET MVCフレームワークとルートモジュールが自身で検証を行うことを許可しないのですか?





ルート制限



ASP.NET MVCでルート制限を使用することは、ルートマッピングプロセス自体の一部です。 たとえば、ルートに製品IDを使用してカタログに製品を表示する電子ストアを考えてみましょう。 なぜなら この場合、IDは整数でなければならず、1〜5桁のみで構成できます。これをルート制限として指定して、有効なID-shnikiのみがルートで受け入れられるようにします。



routes.MapRoute( "Product" , "Product/{id}" ,

new { controller = "Products" , action = "Details" },

new { id = @"\d{1,5}" }); // Constraint




* This source code was highlighted with Source Code Highlighter .








正規表現「\ d {1,5}」を使用して、idが1〜5桁の範囲であることを指定するのがいかに簡単であるかに注意してください。 誰かが次のような無効なルートを入力した場合:



/製品/ abc



エラーのあるページを受け取ります(自分のエラーページが設定されていない場合-標準の「リソースが見つかりません」/「リソースが見つかりません。」)。



カスタムルート制約



ASP.NET MVCでルート制限を使用するよりも優れているのは、独自の制限を作成する機能です。 独自のルート制限を作成するために必要なのは、 IRouteConstraintを実装するクラスを作成することだけです。そのために、1つのメソッドMatchのみを実装する必要があります。



ルートの一部で渡される従業員の名前をチェックする単純なルート制限を作成しましょう。 ルートは次のようになります。



routes.MapRoute( "Employee" , "Employee/{name}" ,

new { controller = "Employees" , action= "Details" },

new { name = new ExpectedValuesConstraint( "john" , "jane" , "tom" ) });




* This source code was highlighted with Source Code Highlighter .








ルートの{name}フィールドとして期待される名前のリストを持つExpectedValuesConstraintと呼ばれるカスタムルート制限クラスの追加に注意してください。



ExpectedValuesConstraintクラスは次のとおりです。



public class ExpectedValuesConstraint : IRouteConstraint

{

private readonly string [] _values;



public ExpectedValuesConstraint( params string [] values)

{

_values = values;

}



public bool Match(HttpContextBase httpContext, Route route,

string parameterName, RouteValueDictionary values,

RouteDirection routeDirection)

{

return _values.Contains(values[parameterName].ToString(),

StringComparer.InvariantCultureIgnoreCase);

}

}




* This source code was highlighted with Source Code Highlighter .








この場合、parameterNameは「name」になり、RouteValueDictionaryから名前の値を取得して、ルートがマップされたときにコンストラクターに渡される値のリストに名前が含まれているかどうかを確認します。 ルートに渡される名前が「john」、「jane」、または「tom」と等しくない場合-この場合、ユーザーはデフォルトのエラーページ「resource not found」に送信されます(リソースが見つかりません」)。



おわりに



ルートにルート制限を追加できる場合は、いつでも追加します。 ルートエンジンを使用して、アプリケーションへの入力を検証し、期待に合わない場合はエラーを返すようにします。 アプリケーションでダミールートの値を処理する場合は、十分に包括的なルートを作成できることに注意してください。 今回はすべて。






All Articles