2013-10-14 23 views
0

發現多個類型與名爲「Account」的控制器相匹配。如果爲該請求提供服務的路由('{controller}/{action}/{id}')沒有指定命名空間來搜索與該請求匹配的控制器,就會發生這種情況。如果是這種情況,請通過調用「MapRoute」方法enter image description here的重載來註冊該路由,該方法採用'namespaces'參數。在iis中部署asp.net MVC4應用程序時出錯

回答

0

您有兩個AccountController類。一個在P247.ComplianceTracker.MVC.Controllers,另一個在P247.CoachingTool.Mvc.Controllers

解析控制器的組件(依賴關係解析器)按照慣例執行此操作。這意味着它會查找繼承自Controller的類,並遵循命名約定(當控制器設置爲在請求中進行帳戶時,AccountController)。兩個庫都有符合條件的類(或者在兩個名稱空間中都存在一個符合此條件的類)。

所以,你有幾種選擇:

  1. 重命名你的AccountController類
  2. 變化映射的一個(因爲錯誤提出)

System.Web.Mvc.RouteCollectionExtensionsMapRoute擴展以列表名稱空間作爲參數:

public static Route MapRoute (this RouteCollection routes, string name, string url, string[] namespaces);

所以你的註冊可能被更改爲這樣的事:

routes.MapRoute (
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
     namespaces: new string [] { "P247.CoachingTool.Mvc.Controllers" } 
); 

routes.MapRoute (
     name: "Default", 
     url: "compliance/{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
     namespaces: new string [] { "P247.ComplianceTracker.MVC.Controllers" } 
); 

請求路由到賬戶/指數將P247.CoachingTool.Mvc.Controllers.AccountController進行處理,請求由P247.ComplianceTracker.MVC.Controllers.AccountController到comliance /帳號/指數。

注意:網址會發生變化,因此您可能需要更改某些標記或調用輔助函數。附註:代碼在我的機器上編譯,我沒有類似的設置,你可能需要根據你的具體設置進行調整。