Se encontraron varios tipos que coinciden con el controlador denominado 'Inicio'
Actualmente tengo dos proyectos MVC3 no relacionados alojados en línea.
Uno funciona bien, el otro no, dándome el error:
Se encontraron varios tipos que coinciden con el controlador denominado "Inicio". Esto puede suceder si la ruta que atiende esta solicitud ('{controller}/{action}/{id}') no especifica espacios de nombres para buscar un controlador que coincida con la solicitud.
Si este es el caso, registre esta ruta llamando a una sobrecarga del método 'MapRoute' que toma un parámetro 'espacios de nombres'.
La forma en que funciona mi proveedor de alojamiento es que me da acceso FTP y en esa carpeta tengo otras dos carpetas, una para cada una de mis aplicaciones.
ftpFolderA2/foo.com
ftpFolderA2/bar.com
foo.com funciona bien, publico mi aplicación en mi sistema de archivos local, luego envía por FTP el contenido y funciona.
Cuando subo e intento ejecutar bar.com, el problema anterior se activa y me impide usar mi sitio. Todo mientras foo.com todavía funciona .
¿Bar.com está buscando controladores EN TODAS PARTES dentro de ftpFolderA2 y es por eso que está buscando otro?HomeController
? ¿Cómo puedo decirle que solo busque en la carpeta Controlador como debería?
Hechos:
- No utilizar áreas. Estos son dos proyectos COMPLETAMENTE no relacionados. Coloco cada proyecto publicado en cada carpeta respectiva. Nada sofisticado.
- Cada proyecto solo tiene 1 HomeController.
¿Alguien puede confirmar que este es el problema?
Aquí hay otro escenario en el que podría enfrentar este error. Si cambia el nombre de su proyecto para que cambie el nombre del archivo del ensamblado, es posible que tenga dos versiones de su ensamblado ASP.NET, lo que reproducirá este error.
La solución es ir a su bin
carpeta y eliminar los archivos DLL antiguos. (Probé "Reconstruir proyecto", pero eso no los eliminó, así que asegúrese de verificar que ya bin
no estén)
Este mensaje de error suele aparecer cuando utiliza áreas y tiene el mismo nombre de controlador dentro del área y la raíz. Por ejemplo tienes los dos:
~/Controllers/HomeController.cs
~/Areas/Admin/Controllers/HomeController.cs
Para resolver este problema (como sugiere el mensaje de error), puede utilizar espacios de nombres al declarar sus rutas. Entonces, en la definición de ruta principal en Global.asax
:
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new[] { "AppName.Controllers" }
);
y en tu ~/Areas/Admin/AdminAreaRegistration.cs
:
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
new[] { "AppName.Areas.Admin.Controllers" }
);
Si no está utilizando áreas, parece que ambas aplicaciones están alojadas dentro de la misma aplicación ASP.NET y se producen conflictos porque tiene los mismos controladores definidos en diferentes espacios de nombres. Tendrá que configurar IIS para alojar esas dos aplicaciones ASP.NET separadas si desea evitar este tipo de conflictos. Pregúntele esto a su proveedor de alojamiento si no tiene acceso al servidor.
En MVC4 y MVC5 es un poco diferente, use lo siguiente
/App_Start/RouteConfig.cs
namespace MyNamespace
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] {"MyNamespace.Controllers"}
);
}
}
}
y en áreas
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
new[] { "MyNamespace.Areas.Admin.Controllers" }
);
Mire esto... http://www.asp.net/mvc/videos/mvc-2/how-do-i/aspnet-mvc-2-areas
Entonces esta foto (espero que te gusten mis dibujos)