使用 MVC 路由覆盖 Web 表单

Override webforms with MVC routing

我正在处理现有的 ASP.NET webforms 项目 - 慢慢更新到 MVC。我试图通过路由到新的 MVC 控制器来有条件地覆盖一些现有的 Web 表单页面。我可以轻松地将 "example.aspx" URL 路由到 MVC 控制器,但如果存在现有的 "example.aspx" 文件,它就不起作用。

示例代码:

routes.MapRoute
            (
                name: "example",
                url: "example.aspx",
                defaults: new
                {
                    controller = "Example",
                    action = "Index"
                }
                constraints: new { useMvc= "1" }
            );

上面的代码工作正常,并按预期路由到控制器,除非我的解决方案中存在现有的 "example.aspx" 文件 - 在这种情况下它会路由到该文件。但这正是我要覆盖的内容。

是否对现有的网络表单路线给予优惠待遇?有什么办法可以避免这种情况吗?

我找到了使用 MapPageRoute() 进行反向操作的机制,但据我所知,这对我没有帮助。

您可以将您的应用程序配置为忽略您正在通过 MVC 处理的特定路由。您可以在注册新路线之前添加以下行:

routes.IgnoreRoute("{*path}/example.aspx");

希望对您有所帮助。

我没有按照所述解决问题,但我找到了可以达到相同结果的解决方法。

1) 我将 "example.aspx" 文件重命名为其他文件 "foo.aspx"

2) 添加了与我原来的问题类似的 MapRoute()(有约束)

3) 使用 MapPageRoute() 将所有其他 "example.aspx" 调用路由至 "foo.aspx"

我最后还不得不使用 QueryStringConstraint 逻辑,如 another Whosebug answer: 但这是一个单独的问题。

我会把这个问题再开放几天,看看是否有 "real" 解决方案,然后再标记我自己的答案。