asp.net-mvc - 我的项目中存在多个同名 Controller 的问题

标签 asp.net-mvc asp.net-mvc-3 asp.net-mvc-areas

我的 ASP.NET MVC 3 项目遇到以下错误:

Multiple types were found that match the controller named 'Home'. This can happen if the route that services this request ('Home/{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: MyCompany.MyProject.WebMvc.Controllers.HomeController MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController

我的默认 Controller 文件夹中有一个 HomeController,其类名称为 MyCompany.MyProject.WebMvc.Controllers.HomeController。

我的 Global.asax 中的 RegisterRoutes 方法如下所示:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
    }

然后,我有一个名为 Company 的区域,该区域的默认 Controller 文件夹中有一个 HomeController,其类名称为 MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController。

CompanyAreaRegistration 文件中的 RegisterArea 方法如下所示:

   public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Company_default",
            "Company/{controller}/{action}/{id}",
            new { area = "Company", action = "Index", id = UrlParameter.Optional }
        );
    }

这一切都导致了我在本文开头强调的错误。我正在努力尝试从其他各种帖子中拼凑出一个解决方案,但没有运气

是否可以在默认 Controller 文件夹中拥有一个 HomeController,然后在每个区域中拥有一个 HomeController?如果是这样,我是否需要(假设我这样做)更改我的配置文件才能使其工作?

任何帮助将不胜感激!

最佳答案

错误消息包含建议的解决方案:“如果是这种情况,请通过调用采用“namespaces”参数的“MapRoute”方法的重载来注册此路由。”

routes.MapRoute(
     "Default", // Route name
     "{controller}/{action}/{id}", // URL with parameters
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
     new string[] { "MyCompany.MyProject.WebMvc.Controllers"}
);

这将使 http://server/转到 HomeController 的 Index 操作,我认为这就是您想要的。 http://server/company/home将转到公司区域的 HomeController 的索引操作,如区域注册中所定义。

关于asp.net-mvc - 我的项目中存在多个同名 Controller 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5092589/

相关文章:

c# - 如何使用 asp.net mvc4 openid api 获取电子邮件 ID

asp.net - 在菜单中标记 "current"导航项的最佳方式

c# - 如何在 MVC 3 中测试区域注册逻辑?

c# - 如何让 Razor 从模板服务中的另一个程序集中查找 View

asp.net-mvc - Azure 网站,中型实例,2 核,多少个应用程序池?

c# - 每个请求的 spring.net nhibernate session /事务

javascript - 如何在 Visual Studio 2015 中进行捆绑和缩小

c# - MVC 3 中的某些页面不显示菜单?

jquery - ajax 请求在 kiosk 浏览器上缓存

c# - ASP.NET MVC 路由不起作用