数に制約がある、あなたのようなルートの例を次に示します。
routes.MapRoute(
"Question",
"questions/{questionID}",
new { controller = "StackOverflow", action = "Question" },
new { questionID = @"\d+" } //Regex constraint specifying that it must be a number.
);
ここでは、質問 ID に少なくとも 1 つの数字を設定します。これにより、整数以外を含む URL もブロックされ、null 許容 int が不要になります。
注:これは、Int32 の範囲 (-2147483647 - +2147483647) より大きい数値を考慮していません。これは、ユーザーが解決するための演習として残します。:)
ユーザーが「questions/foo」という URL を入力すると、パラメーターの制約に違反するため、ユーザーは質問アクションにヒットせず、失敗します。必要に応じて、キャッチオール/デフォルト ルートでさらに処理できます。
routes.MapRoute(
"Catchall",
"{*catchall}", // This is a wildcard routes
new { controller = "Home", action = "Lost" }
);
これにより、ユーザーは Home コントローラーの Lost アクションに送られます。ワイルドカードの詳細については、こちらを参照してください。
注意: Catchall は LAST ルートとして存在する必要があります。チェーンのさらに上に配置すると、ASP.NET MVC のルートの遅延性を考慮して、その下にある他のすべてを処理することになります。