12

尝试运行 ASP.NET MVC 应用程序时收到以下错误:

'Account' 的请求找到了以下匹配的控制器: uqs.Controllers.Admin.AccountController MvcApplication1.Controllers.AccountController

我搜索了该项目MvcApplication1.Controllers.AccountController以将其删除,但找不到匹配项。

我尝试注册一条路线来修复它:

 routes.MapRoute(
     "LogAccount", // Route name
     "{controller}/{action}/{id}", // URL with parameters
     new { controller = "Account", action = "LogOn", id = "" },
     new string[] { "uqs.Controllers.Admin" } // Parameter defaults
 );

但这并没有解决它。

找到了多种与名为“帐户”的控制器匹配的类型。

我该如何解决这个问题?

4

6 回答 6

61

如果重构项目并将默认命名空间和程序集从“MVCApplication1”更改为“uqs”,您的 bin 目录中可能会出现 2 个程序集(新的和旧的)。您可能会收到此错误,因为 AccountController 在两个程序集中。

清理旧 MVCApplication1.dll 的 bin 目录。

于 2010-05-13T15:48:18.727 回答
11

您的应用程序中不能有多个控制器Account,即使在不同的命名空间中也是如此。

您必须将这些控制器拆分为Area(ASP.NET MVC 2 中的一个功能)。

如果您进行查找,AccountController您将找到Account在您的应用程序中命名的所有控制器;Areas如果你想要它们两个,将它们移到不同的位置,或者删除一个。

于 2010-04-13T12:54:36.797 回答
4

有同样的问题。清理了垃圾箱,我很高兴。

于 2012-09-05T07:46:50.393 回答
3

即使提供了命名空间,也可能会出现稍微令人困惑的问题变化(类似于它会导致相同的错误消息)。在这方面,我认为 MVC 3 比 MVC 2 更挑剔一些。


简短的回答:

确保控制器的命名空间实际上是MapRoute调用中指定的命名空间!!


长答案

我有 3 个区域://default ("")它们每个都有FacebookStoreAdminController

我有这样映射的路线(对于我的默认区域):

routes.MapRoute(
     "Default",
     "{controller}/{action}/{id}",
     new { controller = "Gateway", action = "Index", id = UrlParameter.Optional },
     new string[] { "RR.Controllers.Main" }
);

对 /admin 的请求给出了以下错误:

找到了多种与名为“admin”的控制器匹配的类型。如果为该请求提供服务的路由 ('{controller}/{action}/{id}') 未指定命名空间...

'admin' 的请求找到了以下匹配的控制器:

RR.FacebookControllers.AdminController
RR.Controllers.AdminController
RR.StoreControllers.AdminController

但是等一下!我没有指定控制器命名空间......?这是怎么回事.... ?

原来我的默认区域的管理控制器命名空间是RR_MVC.Controller而不是Rolling_Razor_MVC.Controller.Main.

出于某种原因,在 MVC 2 中这并没有产生问题,但在 MVC 3 中却出现了问题。我认为 MVC 3 只是要求您在存在潜在歧义时更加明确。

于 2011-04-12T02:21:17.993 回答
0

AccountController由 ASP.NET MVC Visual Studio 模板自动生成。它位于Controllers\AccountController.cs。尝试在项目中搜索并删除它。

于 2010-04-13T08:26:21.307 回答
0

我有这个问题...

通过删除 .csproj 文件之一中的项目引用来解决

于 2011-11-21T10:56:52.213 回答