Estou tendo o seguinte erro com meu projeto ASP.NET MVC 3:
Vários tipos foram encontrados que correspondem ao controlador chamado 'Home'. Isso pode acontecer se a rota que atende a esta solicitação ('Home / {action} / {id}') não especificar namespaces para procurar um controlador que corresponda à solicitação. Se for esse o caso, registre essa rota chamando uma sobrecarga do método 'MapRoute' que leva um parâmetro de 'namespaces'.
A solicitação de 'Home' encontrou os seguintes controladores correspondentes: MyCompany.MyProject.WebMvc.Controllers.HomeController MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController
Eu tenho um HomeController na minha pasta de controlador padrão, com um nome de classe de MyCompany.MyProject.WebMvc.Controllers.HomeController.
Meu método RegisterRoutes, em meu global.asax, é semelhante a:
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
);
}
Tenho então uma área chamada Company, com um HomeController na pasta do controlador padrão para a área, com o nome de classe MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController.
O método RegisterArea no arquivo CompanyAreaRegistration se parece com:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Company_default",
"Company/{controller}/{action}/{id}",
new { area = "Company", action = "Index", id = UrlParameter.Optional }
);
}
Isso tudo está levando ao erro que destaquei no início desse post. Estou lutando para encontrar uma solução de vários outros posts, sem SORTE .
É possível ter um HomeController na pasta de controladores padrão e outro em CADA área? Em caso afirmativo, preciso fazer (presumindo que sim) alterações em meu arquivo de configuração para que isso funcione?
Qualquer ajuda seria muito apreciada!
fonte
Respostas:
A mensagem de erro contém a solução recomendada: "Se for este o caso, registre esta rota chamando uma sobrecarga do método 'MapRoute' que leva um parâmetro de 'namespaces'."
Isso fará com que http: // server / vá para a ação Index do seu HomeController, que é, eu acho, o que você deseja. http: // servidor / empresa / home irá para a ação Índice do HomeController da área Empresa, conforme definido no cadastro da área.
fonte
namespaces
parâmetro é um array de string, então você deve ser capaz de passar qualquer número adicionando ao array:new string[] { "MyCompany.MyProject.WebMvc.Controllers", "My.Second.Namespace", "My.Third.Namespace", "Namespaces.Etc" }
MyProject.Controllers
fez entretanto.MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController
classe está em execução. Mas a visão que aparece é a antiga.Esta é a abordagem asp.net mvc4:
fonte
Eu tinha renomeado os namespaces, então, eu apenas excluo as pastas bin e obj e recompilo , trabalho novamente.
fonte
Outra causa plausível para esse problema pode ser encontrada abaixo:
Vários tipos foram encontrados que correspondem ao controlador chamado 'Home'
fonte
usa isto
fonte
Use apenas o nome do projeto:
fonte
Se você estiver usando RazorGenerator, apenas informar o
namespaces
parâmetro pode não ser suficiente.Eu consegui resolver adicionando a declaração marcada abaixo em
Global.asax.cs
:fonte
Como Chris Moschini mencionou, o parâmetro namespaces pode não ser suficiente se você tiver duas áreas com o mesmo nome de controlador com namespaces diferentes e a rota de nenhuma área padrão retornará 500 erro de servidor.
É "melhor" substituir o manipulador de rota padrão e adicionar esta linha:
fonte
Tive esse problema depois de adicionar uma referência a outro projeto que tinha as mesmas rotas e o problema continuou depois que removi a referência.
Resolvido excluindo o arquivo .dll dessa referência adicionada da pasta bin e reconstruindo.
fonte
Como muitos outros, tive esse problema depois de criar um novo projeto de modelo MVC a partir do menu VS2017, ao construir o projeto eu recebia a mensagem de erro da operação. Em seguida, usei a resposta https://stackoverflow.com/a/15651619/2417292 postada anteriormente neste tópico por cooloverride para projetos mvc4. Isso ainda não corrigiu meu problema, então renomei minha pasta de visualização Home e o arquivo HomeController para a pasta de visualização Company / e o arquivo do controlador CompanyController. Isso funcionou para mim, não uma correção por dizer, mas uma solução alternativa se você não travou em ter a rota Home / Index, meu outro problema foi não consegui encontrar a referência que causou o erro e devido ao fato de minha plataforma dev ser Azure WebApplication versus um VM completa com um sistema de arquivos completo e configurações do IIS para mexer.
fonte
Eu tive o mesmo problema e descobri que a versão mais antiga tinha criado arquivos compilados na pasta "bin".
Depois de excluí-los, o erro desapareceu.
fonte