2015-07-20 69 views
1

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

示例代码:

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

上面的代码工作正常,并且如预期路由到所述控制器,除非有在我的解决方案的现有“example.aspx”文件 - 在这种情况下它路由到该代替。但这正是我想要重写的。

现有的网络表单路由给予优惠待遇吗?有什么办法可以绕过这个吗?

我发现了使用MapPageRoute()做相反的机制,但据我所知,这并不能帮助我。

+0

如果您尝试覆盖,为什么不在删除'example.aspx'后添加路线? – mason

+0

这可能有助于http://stackoverflow.com/a/11258217/1663001 – DavidG

+0

@mason:因为它是基于约束的条件。有时我想重写,但有时我需要旧功能。 –

回答

0

我没有解决问题,但我找到了解决方法,将达到相同的结果。

1)我改名为 “example.aspx” 文件到别的东西 “foo.aspx”

2)的添加图路线()相似,我原来的问题(与约束)

3)二手的MapPageRoute()路由所有其他“example.aspx”来电“foo.aspx”

我也结束了其作为由 another stackoverflow answer:描述,但这是一个单独的问题使用QueryStringConstraint逻辑。

我会在打开我自己的答案之前多留几天,看看是否有“真正的”解决方案。

+0

也许更好:不是重命名原始文件,而是将其移动到另一个目录。例如,一个名为“WebformsRoutedByMVC”的目录。唯一的要求是原始的内置路由将不再根据给定的URL找到文件。 –

0

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

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

希望这会有所帮助。

+0

已经尝试过。从我所看到的情况来看,你的路线中有什么并不重要。如果有一个与所调用的URL相匹配的asp webform,那么它会自动覆盖指定的路由 - 无论它们是否已设置或是否被设置为忽略。 –