2013-03-30 63 views
1

當我運行我的Web API代碼兩個主場控制器找到

Multiple types were found that match the controller named 'Home'. This can happen if the route that services this request ('{controller}/{action}/{id}') does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the 'MapRoute' method that takes a 'namespaces' parameter. 

The request for 'Home' has found the following matching controllers: 
A.Controllers.HomeController 
N.Controllers.HomeController 

我有這樣的消息,但我只有1家控制器。發生什麼事?

回答

2

您可能重命名了您的MVC項目,而舊的DLL仍在bin文件夾中。請記住,ASP.NET MVC從bin文件夾中的所有程序集加載控制器。您必須查找bin文件夾中的所有程序集,並確保您沒有兩次具有相同的控制器。

事實上,在同一個應用程序中可以使用兩次相同的控制器名稱。舉個例子,假設你想在你的主要部分有一個HomeController並且在某個區域有一個HomeController。當配置路線,你可以指定一個命名空間約束的命名空間將包含控制器:

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

,並在您的區域:

context.MapRoute(
    name: "Admin_default", 
    url: "Admin/{controller}/{action}/{id}", 
    defaults: new { action = "Index", id = UrlParameter.Optional }, 
    namespaces: new[] { "MvcApplication1.Areas.Admin.Controllers" } 
); 
1

下看(首頁)名稱編輯 - >查找。並查看它是否用於其他網頁。還要確保頁面不會從任何其他頁面繼承此控件。