使用 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" 解决方案,然后再标记我自己的答案。
我正在处理现有的 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" 解决方案,然后再标记我自己的答案。