従来のWebフォームアプリをMVCに変換し、一度に1ページずつ処理します。プロジェクトを使いやすくするために、以前はプロジェクトのルートにあったすべてのWebフォームページを/webformsサブディレクトリに移動しました。したがって、/ page.aspx?param = 123の着信リクエストをキャプチャし、それらを/webforms/page.aspx?param=123にリダイレクトする必要があります。これを行う簡単な方法は、そのような要求をそのジョブを実行するコントローラーに渡すルートハンドラーを設定することだと思いました。私は次のようなルートを設定しました:
routes.MapRoute("WebformsRedirect", "{*page}",
new { controller = "Webforms", action = "ForwardToPage" },
new { page = @"\S+.aspx\S*" }
);
この種の機能は機能しますが、クエリ文字列はキャプチャせず、ページ部分のみをキャプチャします。コントローラでRequestオブジェクトのクエリ文字列を取得できるので、大したことではありませんが、ルートのみを介して取得できると便利です。私のルーティングユニットテスト(Steve SandersonのMVCブックからコピーしたもの)は、クエリ文字列を使用してテストすると実際に正しく合格するため、機能しない理由がわかりません。私の正規表現は間違っていますか?それらは私の強みではありません。