2015-07-20 123 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,那麼它會自動覆蓋指定的路由 - 無論它們是否已設置或是否被設置爲忽略。 –