Multiple types were found that match the controller named ‘Home’

Så jeg har siddet og rodet en del med BilligeBoxers.dk nyeste webplatform, som ligger grund til E-commercia# som er mit open source E-commerce projekt. Idag er jeg gået igang med at bygge noget af admin delen, og dette bruger jeg ASP.NET’s feature kaldet Areas.

Jeg tilføjede et admin area og derefter ville jeg tilføje en HomeController.cs og stødte derefter på følgende fejl da jeg buildede projektet for at teste det:

[text]
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:
BilligeBoxers.Areas.StoreManager.Controllers.HomeController
BilligeBoxers.Controllers.HomeController
[/text]

Det betyder faktisk at der bliver registeret 2 controllere af samme navn. I dette tilfælde “homeController”.

Hvordan løses det lige?

En hurtig Google søgning viser at man blot skal lave følgende ændring til sin “RouteConfig.cs” fil som ligger inde i App_Start

[csharp]

new string[] {“BilligeBoxers.Areas.Admin.Controllers”}

[/csharp]

og derved kommer min RouteConfig.cs til at se sådan her ud:

[csharp]
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
“StoreManager_default”,
“StoreManager/{controller}/{action}/{id}”,
defaults: new { controller = “Home”, action = “Index”, id = UrlParameter.Optional },
new string[] {“BilligeBoxers.Areas.Admin.Controllers”}
);
[/csharp]

Det gav mig dog et lidt andet problem, og det var intellisense som fortalte mig: ” Named argument specifications must appear after all fixed arguments have been specified C:\ASP.NET\BilligeBoxers\BilligeBoxers\App_Start\RouteConfig.cs”

Så det var alligevel ikke helt en løsning?!?!

Det var det så alligevel, grunden til fejlen kom var fordi der stadig stod Name: “Default”, Url: “bla bla bla…” når det skulle se således ud:

[csharp]

routes.MapRoute(
“Default”,
“{controller}/{action}/{id}”,
new { controller = “Home”, action = “Index”, id = UrlParameter.Optional },
new [] {“BilligeBoxers.Controllers”}
);

[/csharp]

Husk det skal også gøres i din “@AreaName@AreaRegistration.cs” hvor @AreaName@ skal selvfølgelig være det som du kalder dit area, her skal du blot huske at navngive din new[] { “Namespace” } til det korrekte namespace!

Spørgsmål?

Skriv et svar