MVC 5多类型匹配控制器

时间:2014-04-07 13:58:47

标签: asp.net-mvc asp.net-mvc-5 asp.net-mvc-areas

我知道在Stackoverflow上有很多关于这个特定错误的问题和帖子,但是,我似乎仍然尝试的任何东西都无法解决问题。

我有一个 MVC 5 网络应用程序,其中两个帐户控制器,一个在默认的Controller文件夹中,另一个在区域中,如此

  • MyApp.UI.Areas.Admin.Controllers.AccountController
  • MyApp.UI.Controllers.AccountController

当我尝试使用此Actionlink命中PCF360.UI.Controllers.AccountController内的Login Action时

@Html.ActionLink("Log in", "Login", "Account", new { area = "" }, null)

我收到以下错误

  

发现多个类型与名为“帐户”的控制器匹配。   “帐户”请求找到了以下匹配项   控制器:PCF360.UI.Areas.Admin.Controllers.AccountController   PCF360.UI.Controllers.AccountController

内部区域 - >管理员 - > AdminAreaRegistration

我修改了context.MapRoute,就像这样

context.MapRoute(
                "Admin_default",
                "Admin/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional },
                new[] { "MyApp.UI.Areas.Admin.Controllers" }
            );

App_Start中的MapRoute - > RouteConfig看起来像这样

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

有谁知道为什么我会收到此错误?

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

尝试在RouteConfig中定义名称空间:

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

答案 1 :(得分:2)

我参与了像你这样的项目。

我的管理区域注册是:

   context.MapRoute(
            "admin_default",
            "admin/{controller}/{action}/{id}",
            new { Controller="Home", action = "Index", id = UrlParameter.Optional }
        );

我的RouteConfig是:

   routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

也许像这样配置您的AdminAreaRegistration和RouteConfig可以解决您的问题。