J'ai actuellement deux projets MVC3 non liés hébergés en ligne.
L'un fonctionne bien, l'autre ne fonctionne pas, ce qui me donne l'erreur:
Plusieurs types ont été trouvés qui correspondent au contrôleur nommé 'Home'. Cela peut se produire si la route qui dessert cette demande ('{contrôleur} / {action} / {id}') ne spécifie pas d'espaces de noms pour rechercher un contrôleur qui correspond à la demande.
Si tel est le cas, enregistrez cette route en appelant une surcharge de la méthode 'MapRoute' qui prend un paramètre 'namespaces'.
La façon dont mon hébergeur fonctionne, c'est qu'il me donne un accès FTP et dans ce dossier, j'ai deux autres dossiers, un pour chacune de mes applications.
ftpFolderA2 / foo.com
ftpFolderA2 / bar.com
foo.com fonctionne très bien, je publie mon application sur mon système de fichiers local puis FTP le contenu et ça marche.
Lorsque je télécharge et essaie d'exécuter bar.com, le problème ci-dessus se déclenche et m'empêche d'utiliser mon site. Pendant que foo.com fonctionne toujours .
Bar.com recherche-t-il des contrôleurs PARTOUT dans ftpFolderA2 et c'est pourquoi il en trouve un autre HomeController
? Comment puis-je lui dire de ne regarder que dans le dossier Controller comme il se doit?
Les faits:
- Ne pas utiliser de zones. Ce sont deux projets ENTIÈREMENT indépendants. Je place chaque projet publié dans chaque dossier respectif. Rien d'extraordinaire.
- Chaque projet n'a qu'un seul HomeController.
Quelqu'un peut-il confirmer que c'est le problème?
la source
Réponses:
Ce message d'erreur se produit souvent lorsque vous utilisez des zones et que vous avez le même nom de contrôleur à l'intérieur de la zone et de la racine. Par exemple, vous avez les deux:
~/Controllers/HomeController.cs
~/Areas/Admin/Controllers/HomeController.cs
Afin de résoudre ce problème (comme le message d'erreur vous le suggère), vous pouvez utiliser des espaces de noms lors de la déclaration de vos itinéraires. Donc, dans la définition de l'itinéraire principal dans
Global.asax
:et dans votre
~/Areas/Admin/AdminAreaRegistration.cs
:Si vous n'utilisez pas de zones, il semble que vos deux applications sont hébergées dans la même application ASP.NET et des conflits se produisent car vous avez les mêmes contrôleurs définis dans des espaces de noms différents. Vous devrez configurer IIS pour héberger ces deux applications distinctes ASP.NET si vous souhaitez éviter ce type de conflits. Demandez à votre hébergeur si vous n'avez pas accès au serveur.
la source
Voici un autre scénario où vous pourriez rencontrer cette erreur. Si vous renommez votre projet afin que le nom de fichier de l'assembly change, il vous est possible d'avoir deux versions de votre assembly ASP.NET, qui reproduiront cette erreur.
La solution est d'aller dans votre
bin
dossier et de supprimer les anciennes DLL. (J'ai essayé "Rebuild Project", mais cela ne les a pas supprimés, alors assurez-vous de vérifierbin
qu'ils sont partis)la source
Dans MVC4 et MVC5, c'est un peu différent, utilisez ce qui suit
/App_Start/RouteConfig.cs
et dans les zones
la source
Regardez ceci ... http://www.asp.net/mvc/videos/mvc-2/how-do-i/aspnet-mvc-2-areas
Ensuite, cette image (j'espère que vous aimez mes dessins)
la source
Ce que les autres ont dit est correct, mais pour ceux qui sont toujours confrontés au même problème:
dans mon cas, cela s'est produit parce que j'ai copié un autre projet n le renommé en quelque chose d'autre MAIS les fichiers de sortie précédents dans le
bin
dossier étaient toujours là ... Et malheureusement, frapperBuild -> Clean Solution
après avoir renommé le projet et sonNamespaces
ne les supprime pas ... donc les supprimer manuellement a résolu mon problème!la source
dans votre
bin/
dossier de projetassurez-vous que vous n'avez que votre PROJECT_PACKAGENAME.DLL
et supprimez ANOTHER_PROJECT_PACKAGENAME.DLL
qui pourrait apparaître ici par erreur ou vous renommez simplement votre projet
la source
Vérifiez le dossier bin s'il existe un autre fichier dll qui peut avoir des conflits avec la classe homeController.
la source
Une autre solution consiste à enregistrer un espace de noms par défaut avec ControllerBuilder. Comme nous avions beaucoup de routes dans notre application principale et une seule route générique dans nos régions (où nous spécifions déjà un espace de noms), nous avons trouvé que c'était la solution la plus simple:
la source
Même si vous n'utilisez pas de zones, vous pouvez toujours spécifier dans votre RouteMap quel espace de noms utiliser
Mais il semble que le problème réel soit la façon dont vos deux applications sont configurées dans IIS
la source
Je viens d'avoir ce problème, mais seulement lorsque j'ai publié sur mon site Web, sur mon débogage local, cela s'est bien passé. J'ai trouvé que je devais utiliser le FTP de mon hébergeur et aller dans mon répertoire de publication et supprimer les fichiers dans le dossier BIN, les supprimer localement n'a rien fait lorsque j'ai publié.
la source
Il peut y avoir un autre cas avec les zones même si vous avez suivi toutes les étapes du routage dans les zones (comme donner des espaces de noms dans la table de routage globale), qui est:
Par exemple:
Fait ceci:
Au lieu de:
la source
Vous pouvez également obtenir l'erreur 500 si vous ajoutez votre propre assembly qui contient l'ApiController en remplaçant GetAssemblies du DefaultAssembliesResolver et il est déjà dans le tableau à partir de base.GetAssemblies ()
Exemple concret:
si le code ci-dessus se trouve dans le même assembly que votre Controller, cet assembly sera dans la liste deux fois et générera une erreur 500 car l'API Web ne sait pas laquelle utiliser.
la source
si vous voulez le résoudre automatiquement .. vous pouvez utiliser l'application simplement ajouter simplement le code suivant:
la source
J'ai le même problème et rien n'a aidé. Le problème est que je n'ai en fait aucun doublon, cette erreur apparaît après le basculement de l'espace de noms du projet
MyCuteProject
versMyCuteProject.Web
.À la fin, j'ai réalisé que la source d'erreur est un
global.asax
fichier - un balisage XML, pas.cs
-codebehind. Vérifiez l'espace de noms dedans - cela m'a aidé.la source
Je viens de supprimer le dossier 'Bin' du serveur et de copier mon bac sur le serveur, et mon problème est résolu.
la source
Dans Route.config
espaces de noms: nouveau [] {"Appname.Controllers"}
la source
Nous avons constaté que nous obtenions cette erreur lors d'un conflit dans notre build qui s'est présenté comme un avertissement.
Nous n'avons pas obtenu les détails jusqu'à ce que nous ayons augmenté le niveau de détail de Visual Studio -> Tools -> Options -> Projects and Solutions -> Build and Run -> MSBuild project build output verbosity.
Notre projet est une application Web .net v4 et il y avait un conflit entre System.Net.Http (v2.0.0.0) et System.Net.Http (v4.0.0.0). Notre projet a référencé la version v2 du fichier à partir d'un package (inclus à l'aide de nuget). Lorsque nous avons supprimé la référence et ajouté une référence à la version v4, la construction a fonctionné (sans avertissements) et l'erreur a été corrigée.
la source
Une autre variante de cette erreur est lorsque vous utilisez resharper et que vous utilisez des options de refactorisation "auto" qui incluent le changement de nom d'espace de noms. C'est ce qui m'arrive. Pour résoudre le problème avec ce type de dossier de suppression de scénario
bin
la source
Cliquez avec le bouton droit sur le projet et sélectionnez nettoyer le projet. Sinon, videz complètement le répertoire bin, puis reconstruisez-le à nouveau. Cela devrait supprimer tous les assemblages restants des versions précédentes
la source
Parfois, dans une seule application, ce problème survient Dans ce cas, cochez cette case lorsque vous publiez votre application
la source
Si cela pouvait aider les autres, j'ai également fait face à cette erreur. Le problème est dû à une référence incorrecte dans le site Web de moi. Pour une raison inconnue, mon site Web faisait référence à un autre site Web, dans la même solution. Et une fois que j'ai supprimé cette mauvaise référence, la chose a commencé à fonctionner correctement.
la source
Si vous travaillez dans Episerver ou dans un autre CMS basé sur MVC, vous pouvez constater que ce nom de contrôleur particulier a déjà été revendiqué.
Cela m'est arrivé lors de la tentative de création d'un contrôleur appelé
FileUpload
.la source
j'étais confronté au même problème. et la raison principale était que j'avais le même contrôleur dans deux zones différentes. une fois que j'enlève l'un d'eux, cela fonctionne bien.
je l'ai vous sera utile.
la source
J'ai deux projets dans une solution avec le même nom de contrôleur. J'ai supprimé la deuxième référence de projet dans le premier projet et le problème est résolu
la source
J'ai trouvé que cette erreur peut se produire avec le site Web ASP.NET traditionnel lorsque vous créez le contrôleur dans un répertoire non App_Code (parfois Visual Studio empêche cela).
Il définit le type de fichier sur "Compiler" tandis que tout code ajouté à "App_Code" est défini sur "Contenu". Si vous copiez ou déplacez le fichier dans App_Code, il est toujours défini comme "Compiler".
Je soupçonne que cela a quelque chose à voir avec le fonctionnement du projet de site Web, car les projets de site Web n'ont aucune opération de génération. Effacer le dossier bin et passer à "Contenu" semble le corriger.
la source