Domanda

Ricevo il seguente errore quando provo a eseguire la mia applicazione ASP.NET MVC:

La richiesta per "Account" ha trovato i seguenti controller corrispondenti: uqs.Controllers.Admin.AccountController MvcApplication1.Controllers.AccountController

Ho cercato il progetto MvcApplication1.Controllers.AccountController per rimuoverlo, ma non riesco a trovare una corrispondenza.

Provo a registrare un percorso per risolverlo:

 routes.MapRoute(
     "LogAccount", // Route name
     "{controller}/{action}/{id}", // URL with parameters
     new { controller = "Account", action = "LogOn", id = "" },
     new string[] { "uqs.Controllers.Admin" } // Parameter defaults
 );

ma questo non ha risolto il problema.

Sono stati trovati più tipi che corrispondono al controller denominato "account".

Come posso risolvere questo problema?

È stato utile?

Soluzione

Non si può avere più di un controller di nome Account nell'applicazione, anche in spazi dei nomi diversi.

Bisogna avere questi controller suddivisi per Area (una caratteristica in ASP.NET MVC 2).

Se si effettua una scoperta per AccountController troverete tutti i controller di nome Account nell'applicazione; e spostarli fuori in diverse Areas se si desidera che tutti e due, o uno di eliminazione.

Altri suggerimenti

Se si refactoring il progetto e modificare il valore predefinito Namespace e Assembly da "MVCApplication1" a "UQS", si può finire con 2 assemblee nella directory bin (quello nuovo e il vecchio). È possibile ottenere questo errore perché l'AccountController è in entrambi i gruppi.

Pulire il bidone directory del vecchio MVCApplication1.dll.

Ha avuto questo stesso problema. Ripulito il bidone ed ero a posto.

Una variazione leggermente confusa del problema (simile in quanto causa lo stesso messaggio di errore) può verificarsi anche con gli spazi dei nomi forniti.MVC 3 penso che sia un po' più esigente di MVC 2 su questo fronte.


Risposta breve:

Assicurati che lo spazio dei nomi del tuo controller sia effettivamente lo spazio dei nomi specificato nel file MapRoute chiamata!!


Risposta lunga:

Ho 3 aree: default ("") / Facebook / Store e ognuno di loro ha AdminController

Ho il percorso mappato in questo modo (per la mia area predefinita):

routes.MapRoute(
     "Default",
     "{controller}/{action}/{id}",
     new { controller = "Gateway", action = "Index", id = UrlParameter.Optional },
     new string[] { "RR.Controllers.Main" }
);

Una richiesta a /admin ha dato il seguente errore:

Sono stati trovati più tipi che corrispondono al controller chiamato "amministratore".Questo può accadere se il percorso che serve questa richiesta ('{controller}/{action}/{id}') non specifica gli spazi dei nomi ...

La richiesta di "amministratore" ha trovato i seguenti controller di corrispondenza:

RR.FacebookControllers.AdminController
RR.Controllers.AdminController
RR.StoreControllers.AdminController

Ma aspetta un attimo!Non ho specificato lo spazio dei nomi del controller ....?Cosa sta succedendo....?

Bene, si è scoperto che lo spazio dei nomi del controller di amministrazione della mia area predefinita era RR_MVC.Controller invece di Rolling_Razor_MVC.Controller.Main.

Per qualche ragione in MVC 2 questo non ha dato problemi, ma in MVC 3 sì.Penso che MVC 3 richieda semplicemente che tu sia più esplicito quando ci sono potenziali ambiguità.

AccountController viene generato automaticamente dal modello di Visual Studio ASP.NET MVC. Si trova in Controllers\AccountController.cs. Effettua una ricerca per esso nel progetto ed eliminarlo.

Ho avuto questo problema ...

risolvere rimuovendo un riferimento al progetto in uno dei file Csproj

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top