最初のアプローチ
アクションをキャッチするルートを作成します。
routes.MapRoute(
"Catcher1",
"{action}",
new { controller = "Default", action = string.Empty });
ただし、これは、デフォルト コントローラーで同じ数のコントローラー アクションを作成する必要があることを意味します。
2 番目のアプローチ
それも避けて、代わりにコントローラーとアクションを 1 つだけにしたい場合は、次のようにルートを記述します。
routes.MapRoute(
"Catcher2",
"{path}",
new { controller = "Default", action = "PageName", path = string.Emtpy },
new { path = @"[a-zA-Z0-9]+" });
このルートはルート制約も定義するため、最初のルート セグメントに実際に何かがあるルートのみをキャッチします。この制約を定義して、必要なリクエストのみをキャッチすることができます (つまりpath = "Result|Search|Whatever"
) 。
次に、次のDefaultController
ようなものがあります。
public ActionResult PageName(string path)
{
// code goes here
}
2 番目のアプローチは非常に実行可能に思えますが、すべてのロジックがこのコントローラー アクションを通過する必要があるため (この種の要求の場合)、お勧めしません。これらのアクションを論理的なものに分けたほうがよいでしょう。実際に同じことを行うもの (switch
ステートメントの束などを持たないため) は、別々のルートで定義されます (単一のルートを使用して実行できない場合)。