Bei meinem ASP.NET MVC 3-Projekt tritt der folgende Fehler auf:
Es wurden mehrere Typen gefunden, die dem Controller mit dem Namen "Home" entsprechen. Dies kann passieren, wenn die Route, die diese Anforderung bedient ('Home / {action} / {id}'), keine Namespaces angibt, um nach einem Controller zu suchen, der der Anforderung entspricht. Wenn dies der Fall ist, registrieren Sie diese Route, indem Sie eine Überladung der 'MapRoute'-Methode aufrufen, die einen' Namespaces'-Parameter verwendet.
Die Anforderung für 'Home' hat die folgenden übereinstimmenden Controller gefunden: MyCompany.MyProject.WebMvc.Controllers.HomeController MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController
Ich habe einen HomeController in meinem Standard-Controller-Ordner mit dem Klassennamen MyCompany.MyProject.WebMvc.Controllers.HomeController.
Meine RegisterRoutes-Methode in meiner global.asax sieht folgendermaßen aus:
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
);
}
Ich habe dann einen Bereich namens Company mit einem HomeController im Standard-Controller-Ordner für den Bereich mit dem Klassennamen MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController.
Die RegisterArea-Methode in der CompanyAreaRegistration-Datei sieht folgendermaßen aus:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Company_default",
"Company/{controller}/{action}/{id}",
new { area = "Company", action = "Index", id = UrlParameter.Optional }
);
}
Dies alles führt zu dem Fehler, den ich am Anfang dieses Beitrags hervorgehoben habe. Ich habe Mühe, eine Lösung aus verschiedenen anderen Beiträgen zusammenzustellen, ohne Glück .
Ist es möglich, einen HomeController im Standard-Controller-Ordner und dann einen in JEDEM Bereich zu haben? Wenn ja, muss ich (sofern ich dies tue) Änderungen an meiner Konfigurationsdatei vornehmen, damit dies funktioniert?
Jede Hilfe wäre sehr dankbar!
quelle
Antworten:
Die Fehlermeldung enthält die empfohlene Lösung: "Wenn dies der Fall ist, registrieren Sie diese Route, indem Sie eine Überladung der 'MapRoute'-Methode aufrufen, die einen' Namespaces'-Parameter verwendet."
Dadurch wird http: // server / zur Indexaktion Ihres HomeControllers, die meiner Meinung nach genau das ist, was Sie wollen. http: // server / company / home wechselt zur HomeController-Indexaktion des Unternehmensbereichs, wie in der Bereichsregistrierung definiert.
quelle
namespaces
Parameter ist ein String-Array, daher sollten Sie in der Lage sein, eine beliebige Zahl zu übergeben, indem Sie dem Array hinzufügen:new string[] { "MyCompany.MyProject.WebMvc.Controllers", "My.Second.Namespace", "My.Third.Namespace", "Namespaces.Etc" }
MyProject.Controllers
tat jedoch.MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController
Klasse wird jedoch ausgeführt. Aber die Ansicht erscheint ist die alte.Dies ist der asp.net mvc4-Ansatz:
quelle
Ich hatte die Namespaces umbenannt, also lösche ich nur die Ordner bin und obj und erstelle neu , arbeite wieder.
quelle
Eine andere plausible Ursache für dieses Problem könnte unten gefunden werden:
Es wurden mehrere Typen gefunden, die mit dem Controller "Home" übereinstimmen.
quelle
benutze das
quelle
Verwenden Sie nur den Namen des Projekts:
quelle
Wenn Sie RazorGenerator verwenden,
namespaces
reicht es möglicherweise nicht aus , nur den Parameter zu informieren .Ich muss lösen, indem ich die unten markierte Aussage hinzufüge
Global.asax.cs
:quelle
Wie Chris Moschini erwähnt, reicht der Parameter "Namespaces" möglicherweise nicht aus, wenn Sie zwei Bereiche mit demselben Controllernamen und unterschiedlichen Namespaces haben und die Standardroute "Keine Bereiche" 500 Serverfehler zurückgibt.
Es ist "am besten", den Standardroutenhandler zu überschreiben und diese Zeile hinzuzufügen:
quelle
Ich hatte dieses Problem, nachdem ich einen Verweis auf ein anderes Projekt mit denselben Routen hinzugefügt hatte, und das Problem wurde fortgesetzt, nachdem ich den Verweis entfernt hatte.
Behebung durch Löschen der DLL-Datei dieser hinzugefügten Referenz aus dem Ordner bin und erneutes Erstellen.
quelle
Wie bei vielen anderen hatte ich dieses Problem, nachdem ich ein neues MVC-Vorlagenprojekt aus dem VS2017-Menü erstellt hatte. Beim Erstellen des Projekts wurde die Fehlermeldung der Operation angezeigt. Ich habe dann die Antwort https://stackoverflow.com/a/15651619/2417292 verwendet, die zuvor in diesem Thread von cooloverride für mvc4-Projekte veröffentlicht wurde. Dadurch wurde mein Problem immer noch nicht behoben, sodass ich meinen Home-Ansichtsordner und meine HomeController-Datei in den Ansichtsordner Company / und die Controller-Datei CompanyController umbenannte. Dies funktionierte dann für mich, kein Fix per say, sondern eine Problemumgehung, wenn Sie nicht an der Route Home / Index festhielten. Mein anderes Problem war, dass ich die Referenz, die den Fehler verursacht, nicht finden konnte und meine Entwicklungsplattform Azure WebApplication vs a war vollständige VM mit einem vollständigen Dateisystem und IIS-Einstellungen, mit denen Sie sich herumschlagen können.
quelle
Die Lösung für " Es wurden mehrere Typen gefunden, die mit dem Controller" Home " übereinstimmen " besteht darin, dass Sie einfach eine der Dateien (.dll) und (.pdb) in den Ordner "bin" eingeben können.
quelle
Ich hatte das gleiche Problem und stellte fest, dass die ältere Version kompilierte Dateien im Ordner "bin" erstellt hatte.
Sobald ich diese gelöscht habe, ist der Fehler verschwunden.
quelle