我正在将一个旧的 webforms 应用程序转换为 MVC,一次处理一个页面。为了使项目更易于使用,我将以前在项目路径中的所有 webforms 页面移动到 /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 对象的查询字符串,所以这不是什么大问题,但如果能够仅通过路由来完成它会很好。我的路由单元测试(我从史蒂夫桑德森的 MVC 书中复制的)在我使用查询字符串测试它们时实际上正确通过了,所以我很困惑为什么它不起作用。我的正则表达式错了吗?他们不是我的强项。