2013-10-25 54 views
0

這是我的場景。在不同的MVC項目中,我有兩個具有相同名稱的控制器。每個控制器可以包含相同的操作(同名),但也可以包含不同的操作(未在其他控制器中指定)。 我註冊了兩條路線,每條路線都有自己的命名空間。不同命名空間中的兩個控制器,每個控制器中的不同操作

當我瀏覽到「Controller/Action1」頁面時,這是可以的。 當我瀏覽到「控制器/ ActionInSecondController」(該行動不在第一個控制器)時,它會拋出一個404.

是否有可能以及如何能夠調用第二個控制器的操作方法?

(注:我添加了一個引用的第二個項目,它的dll被編譯到相同的bin文件夾位置)。

我的路由定義:

routes.MapRoute(
      name: "Default1", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
      namespaces: new string[]{ "Site1.Controllers" } 
     ); 
routes.MapRoute(
       name: "Default2", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
       namespaces: new string[]{ "Site2.Controllers" } 
      ); 
+0

如果你包含了你的路由定義代碼,並且削減了你的控制器類的版本,解密就會容易得多。 – jmoerdyk

+0

兩個項目中的兩條路線相同。這完全取決於哪個項目正在接受Web請求。所有的請求都會發到第一個。 – andleer

+0

這兩個路由都按照該順序位於Site1的路由配置中。這個項目只是一個準系統空的項目,我試圖獲得一個概念證明。我需要的行爲是如果Site1的控制器不包含該操作,則會調用Site2的操作。 – user2921642

回答

0

不要認爲這是可能的,因爲它總是會在第一控制器/路由發現的行動。您可能需要添加額外的識別信息:「url:」controller1/{controller}/{action}/{id}「」, 或者可能創建另一個充當代理的控制器(擴展您想要的控制器採取的偏好,並添加來自第二控制器額外缺少方法):

NewController:Site1.Controllers.Controller

或者你甚至可以使用反射和創建一個控制器爲您根據傳入的參數,它解決的邏輯。

+0

我會接受這個答案,因爲「這是不可能的」默認路由機制。完成這項工作的最好方法是創建一個自定義控制器工廠,並返回具有我需要的操作的控制器。我不想創建更多的路線和重定向等... – user2921642

相關問題