Se encontraron varios tipos que coinciden con el controlador denominado 'Inicio'

Resuelto Only Bolivian Here asked hace 12 años • 25 respuestas

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:

  1. No utilizar áreas. Estos son dos proyectos COMPLETAMENTE no relacionados. Coloco cada proyecto publicado en cada carpeta respectiva. Nada sofisticado.
  2. Cada proyecto solo tiene 1 HomeController.

¿Alguien puede confirmar que este es el problema?

Only Bolivian Here avatar Oct 21 '11 04:10 Only Bolivian Here
Aceptado

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 bincarpeta y eliminar los archivos DLL antiguos. (Probé "Reconstruir proyecto", pero eso no los eliminó, así que asegúrese de verificar que ya binno estén)

Kirk Woll avatar Sep 28 '2012 04:09 Kirk Woll

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.

Darin Dimitrov avatar Oct 20 '2011 21:10 Darin Dimitrov

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" }
            );
Developer avatar Oct 20 '2014 11:10 Developer

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)

ingrese la descripción de la imagen aquí

Tom avatar Jul 06 '2012 11:07 Tom