Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multiple types were found that match the controller named 'Home'. (Two Areas, Same controller name)

This is probably a duplicate to many but the obvious answers in them do not solve my problem.

I get:

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:
App.Web.Controllers.HomeController
App.Web.Areas.Mobile.Controllers.HomeController

I've setup a default namespace for my HomeController in Global.ascx.cs:

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

(Verified that App.Web.Controllers.HomeController is not a typo).

And also registered the Mobile's HomeController in MobileAreaRegistration:

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

Therefore, why is it that I still see the error message? I've built/cleaned and ran again. Still the same outcome.

This is how I register my routes:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);
}
like image 616
LB. Avatar asked Jan 21 '12 21:01

LB.


1 Answers

In your Global.asax route registration for obvious reasons replace:

new string[] { "App.Web.Controllers.HomeController" } 

with:

new string[] { "App.Web.Controllers" } 

That's a namespace constraint that you should use there, not a specific type.

like image 150
Darin Dimitrov Avatar answered Sep 18 '22 10:09

Darin Dimitrov