【问题标题】:Multiple Controllers with one Name in ASP.NET MVC 2ASP.NET MVC 2 中具有一个名称的多个控制器
【发布时间】:2011-02-07 08:01:13
【问题描述】:

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

“帐户”请求找到了以下匹配的控制器: 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
 );

但这并没有解决问题。

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

我该如何解决这个问题?

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-2 routing controllers


    【解决方案1】:

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

    清理旧 MVCApplication1.dll 的 bin 目录。

    【讨论】:

    • 干杯人,我以前遇到过这个问题并最终创建了一个新项目,因为我无法弄清楚问题是什么 - 我愚蠢地认为清理会清除 bin 文件夹,如果我更改了程序集名称就不是这样了 eh??!!
    • 我重命名了我的项目,并且旧的 dll 文件仍在我的 bin 文件夹中——这解决了我的问题。谢谢!
    • 您先生是冠军,谢谢! ASP.NET MVC 在重构命名空间时似乎相对不友好,这是“干净”甚至无法解决的另一个陷阱!
    【解决方案2】:

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

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

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

    【讨论】:

    • 你确定吗?我在不同的命名空间中有两个控制器,一个继承自另一个,并且我不使用区域。在 MapRoute 中设置命名空间(就像上面的 lovjii 一样)修复了相同的错误消息。我的控制器之间的区别是相互继承的吗?
    【解决方案3】:

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

    【讨论】:

    • 清理解决方案还不够,我还需要从 bin 中删除旧的 .dll 文件
    【解决方案4】:

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


    简答:

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


    长答案

    我有 3 个区域:default ("")/Facebook/Store,它们每个都有AdminController

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

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

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

    找到多个匹配的类型 名为“管理员”的控制器。这个可以 如果服务于此的路线发生 请求('{controller}/{action}/{id}') 没有指定命名空间...

    “管理员”的请求已找到 以下匹配的控制器:

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

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

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

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 抱歉,我可能无法解释我的问题。但是,我知道 AccountController 的位置。但我没有名为 MvcApplication1.Controllers.AccountController 的命名空间,我将其重命名为 uqs.Controllers.Admin。并且,尝试运行我的网络应用程序。
      【解决方案6】:

      我遇到了这个问题...

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

      【讨论】:

        猜你喜欢
        • 2011-02-12
        • 1970-01-01
        • 2016-06-21
        • 1970-01-01
        • 2014-08-26
        • 2015-04-01
        • 2010-10-18
        • 1970-01-01
        • 2014-08-16
        相关资源
        最近更新 更多