Ich habe derzeit zwei unabhängige MVC3-Projekte, die online gehostet werden.
Einer funktioniert gut, der andere funktioniert nicht und gibt mir den Fehler:
Es wurden mehrere Typen gefunden, die dem Controller mit dem Namen "Home" entsprechen. Dies kann passieren, wenn die Route, die diese Anforderung bedient ('{controller} / {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.
Mein Hoster arbeitet so, dass er mir FTP-Zugriff gewährt und ich in diesem Ordner zwei weitere Ordner habe, einen für jede meiner Anwendungen.
ftpFolderA2 / foo.com
ftpFolderA2 / bar.com
foo.com funktioniert einwandfrei, ich veröffentliche meine Anwendung in meinem lokalen Dateisystem, dann per FTP den Inhalt und es funktioniert.
Wenn ich bar.com hochlade und versuche, bar.com auszuführen, wird das oben genannte Problem ausgelöst und ich kann meine Website nicht verwenden. Während foo.com noch funktioniert .
Sucht bar.com von Controllern ÜBERALL in ftpFolderA2 und findet deshalb einen anderen HomeController
? Wie kann ich ihm sagen, dass er nur im Controller-Ordner so aussehen soll, wie er sollte?
Fakten:
- Keine Bereiche verwenden. Dies sind zwei völlig unabhängige Projekte. Ich lege jedes veröffentlichte Projekt in den jeweiligen Ordner. Nichts Besonderes.
- Jedes Projekt hat nur 1 HomeController.
Kann jemand bestätigen, dass dies das Problem ist?
quelle
Antworten:
Diese Fehlermeldung tritt häufig auf, wenn Sie Bereiche verwenden und denselben Controller- Namen im Bereich und im Stammverzeichnis haben. Zum Beispiel haben Sie die beiden:
~/Controllers/HomeController.cs
~/Areas/Admin/Controllers/HomeController.cs
Um dieses Problem zu beheben (wie in der Fehlermeldung angegeben), können Sie beim Deklarieren Ihrer Routen Namespaces verwenden. Also in der Hauptroutendefinition in
Global.asax
:und in deinem
~/Areas/Admin/AdminAreaRegistration.cs
:Wenn Sie keine Bereiche verwenden, werden Ihre beiden Anwendungen anscheinend in derselben ASP.NET-Anwendung gehostet, und es treten Konflikte auf, weil Sie dieselben Controller in unterschiedlichen Namespaces definiert haben. Sie müssen IIS so konfigurieren, dass diese beiden als separate ASP.NET-Anwendungen gehostet werden, wenn Sie solche Konflikte vermeiden möchten. Fragen Sie Ihren Hosting-Anbieter danach, wenn Sie keinen Zugriff auf den Server haben.
quelle
Hier ist ein weiteres Szenario, in dem Sie möglicherweise mit diesem Fehler konfrontiert werden. Wenn Sie Ihr Projekt so umbenennen, dass sich der Dateiname der Assembly ändert, können Sie zwei Versionen Ihrer ASP.NET-Assembly verwenden, die diesen Fehler reproduzieren.
Die Lösung besteht darin, in Ihren
bin
Ordner zu gehen und die alten DLLs zu löschen. (Ich habe versucht, "Projekt neu erstellen", aber das hat sie nicht gelöscht. Überprüfenbin
Sie daher, ob sie verschwunden sind.)quelle
In MVC4 & MVC5 ist es ein bisschen anders, verwenden Sie Folgendes
/App_Start/RouteConfig.cs
und in Bereichen
quelle
Sehen Sie sich das an ... http://www.asp.net/mvc/videos/mvc-2/how-do-i/aspnet-mvc-2-areas
Dann dieses Bild (hoffe du magst meine Zeichnungen)
quelle
Was andere gesagt haben, ist richtig, aber für diejenigen, die immer noch das gleiche Problem haben:
In meinem Fall ist es passiert, weil ich ein anderes Projekt kopiert und in etwas anderes umbenannt habe, ABER vorherige Ausgabedateien im
bin
Ordner waren immer noch da ... Und leiderBuild -> Clean Solution
nach dem Umbenennen des Projekt undNamespaces
es entfernt sie nicht ... also löste das manuelle Löschen mein Problem!quelle
in Ihrem Projekt
bin/
ProjektordnerStellen Sie sicher, dass Sie nur Ihre haben Stellen PROJECT_PACKAGENAME.DLL haben
und entfernen Sie ANOTHER_PROJECT_PACKAGENAME.DLL
Das könnte hier versehentlich erscheinen oder Sie benennen Ihr Projekt einfach um
quelle
Überprüfen Sie den Ordner bin, wenn eine andere DLL-Datei in Konflikt mit der homeController-Klasse steht.
quelle
Eine andere Lösung besteht darin, einen Standard-Namespace bei ControllerBuilder zu registrieren. Da wir in unserer Hauptanwendung viele Routen und in unseren Bereichen (in denen wir bereits einen Namespace angegeben haben) nur eine einzige generische Route hatten, war dies die einfachste Lösung:
quelle
Auch wenn Sie keine Bereiche verwenden, können Sie in Ihrer RouteMap dennoch angeben, welcher Namespace verwendet werden soll
Es klingt jedoch so, als ob das eigentliche Problem darin besteht, wie Ihre beiden Apps in IIS eingerichtet sind
quelle
Ich hatte gerade dieses Problem, aber erst als ich es auf meiner Website veröffentlichte, lief es bei meinem lokalen Debug einwandfrei. Ich stellte fest, dass ich das FTP von meinem Webhost verwenden und in mein Veröffentlichungsverzeichnis gehen und die Dateien im BIN-Ordner löschen musste. Das lokale Löschen hat bei der Veröffentlichung nichts bewirkt.
quelle
Es kann einen anderen Fall mit Bereichen geben , in dem Sie alle Schritte beim Routing in Bereichen ausgeführt haben (z. B. die Angabe von Namespaces in der globalen Routing-Tabelle):
Z.B:
Hab es getan:
Anstatt:
quelle
Sie können den 500-Fehler auch erhalten, wenn Sie Ihre eigene Assembly hinzufügen, die den ApiController enthält, indem Sie GetAssemblies des DefaultAssembliesResolver überschreiben. Dieser befindet sich bereits im Array von base.GetAssemblies ()
Ein typisches Beispiel:
Wenn sich der obige Code in derselben Assembly wie Ihr Controller befindet, wird diese Assembly zweimal in der Liste aufgeführt und generiert einen 500-Fehler, da die Web-API nicht weiß, welche verwendet werden soll.
quelle
Wenn Sie es automatisch auflösen möchten, können Sie die Anwendung einfach verwenden und den folgenden Code hinzufügen:
quelle
Ich habe die gleichen Probleme und nichts hat geholfen. Das Problem ist, dass ich tatsächlich keine Duplikate habe. Dieser Fehler tritt auf, nachdem der Projektnamespace von
MyCuteProject
auf umgeschaltet wurdeMyCuteProject.Web
.Am Ende wurde mir klar, dass die Fehlerquelle eine
global.asax
Datei ist - XML-Markup, nicht.cs
-codebehind. Überprüfen Sie den Namespace darin - das hat mir geholfen.quelle
Ich habe gerade den Ordner 'Bin' vom Server gelöscht und meinen Bin auf den Server kopiert, und mein Problem wurde behoben.
quelle
In Route.config
Namespaces: new [] {"Appname.Controllers"}
quelle
Wir haben festgestellt, dass dieser Fehler aufgetreten ist, als in unserem Build ein Konflikt aufgetreten ist, der als Warnung angezeigt wurde.
Wir haben die Details erst erhalten, als wir die Ausführlichkeit der Ausgabe von Visual Studio -> Tools -> Optionen -> Projekte und Lösungen -> Erstellen und Ausführen -> Erstellen von MSBuild-Projekten auf Detailliert erhöht haben.
Unser Projekt ist eine .net v4-Webanwendung und es gab einen Konflikt zwischen System.Net.Http (v2.0.0.0) und System.Net.Http (v4.0.0.0). Unser Projekt hat auf die v2-Version der Datei aus einem Paket verwiesen (einschließlich Nuget). Als wir den Verweis entfernt und einen Verweis auf die v4-Version hinzugefügt haben, hat der Build funktioniert (ohne Warnungen) und der Fehler wurde behoben.
quelle
Eine andere Variante dieses Fehlers ist, wenn Sie Resharper verwenden und einige "automatische" Refactor-Optionen verwenden, die das Ändern des Namespace-Namens beinhalten. Das ist was mit mir passiert ist. Um das Problem mit dieser Art von Szenario zu lösen, löschen Sie den Ordner
bin
quelle
Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie Projekt bereinigen. Oder leeren Sie das bin-Verzeichnis vollständig und erstellen Sie es erneut. Dies sollte alle verbleibenden Baugruppen aus früheren Builds beseitigen
quelle
In einer einzelnen Anwendung tritt dieses Problem auch einige Zeit auf. Aktivieren Sie in diesem Fall dieses Kontrollkästchen, wenn Sie Ihre Anwendung veröffentlichen
quelle
Wenn es anderen helfen könnte, habe ich auch diesen Fehler konfrontiert. Das Problem wurde durch eine falsche Referenz auf meiner Website verursacht. Aus unbekannten Gründen verwies meine Website auf eine andere Website in derselben Lösung. Und sobald ich diese schlechte Referenz entfernt hatte, begann die Sache richtig zu funktionieren.
quelle
Wenn Sie in Episerver oder einem anderen MVC-basierten CMS arbeiten, stellen Sie möglicherweise fest, dass dieser bestimmte Controllername bereits beansprucht wurde.
Dies ist mir passiert, als ich versucht habe, einen Controller namens zu erstellen
FileUpload
.quelle
Ich war mit dem ähnlichen Problem konfrontiert. und Hauptgrund war, dass ich den gleichen Controller in zwei verschiedenen Bereichen hatte. Sobald ich den einen von ihnen entferne, funktioniert es gut.
Ich habe es wird hilfreich für Sie.
quelle
Ich habe zwei Projekte in einer Lösung mit demselben Controllernamen. Ich habe die zweite Projektreferenz im ersten Projekt entfernt und das Problem wurde behoben
quelle
Ich habe festgestellt, dass dieser Fehler bei herkömmlichen ASP.NET-Websites auftreten kann, wenn Sie den Controller in einem Nicht-App_Code-Verzeichnis erstellen (manchmal verhindert Visual Studio dies).
Der Dateityp wird auf "Kompilieren" gesetzt, während der zu "App_Code" hinzugefügte Code auf "Inhalt" gesetzt wird. Wenn Sie die Datei kopieren oder in App_Code verschieben, wird sie weiterhin als "Kompilieren" festgelegt.
Ich vermute, dass es etwas mit dem Betrieb von Website-Projekten zu tun hat, da Website-Projekte keinen Build-Vorgang haben. Das Löschen des Bin-Ordners und das Ändern in "Inhalt" scheint dies zu beheben.
quelle