Estoy haciendo un servicio web ASP.NET MVC 3 y sigo recibiendo esta excepción de forma intermitente.
Seguimiento de pila:
Server Error in '/' Application.
A route named 'ListTables' is already in the route collection. Route names must be unique.
Parameter name: name
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentException: A route named 'ListTables' is already in the route collection. Route names must be unique.
Parameter name: name
Source Error:
Line 24: // }
Line 25: // );
Line 26: context.MapRoute(
Line 27: "ListTables",
Line 28: // example:
Source File: C:\inetpub\wwwroot\SchemaBrowserService\Website\Areas\Api\ApiAreaRegistration.cs Line: 26
Stack Trace:
[ArgumentException: A route named 'ListTables' is already in the route collection. Route names must be unique.
Parameter name: name]
System.Web.Routing.RouteCollection.Add(String name, RouteBase item) +2329682
System.Web.Mvc.RouteCollectionExtensions.MapRoute(RouteCollection routes, String name, String url, Object defaults, Object constraints, String[] namespaces) +236
System.Web.Mvc.AreaRegistrationContext.MapRoute(String name, String url, Object defaults, Object constraints, String[] namespaces) +59
System.Web.Mvc.AreaRegistrationContext.MapRoute(String name, String url, Object defaults) +17
SchemaBrowserService.Areas.Api.ApiAreaRegistration.RegisterArea(AreaRegistrationContext context) in C:\inetpub\wwwroot\SchemaBrowserService\Website\Areas\Api\ApiAreaRegistration.cs:26
System.Web.Mvc.AreaRegistration.CreateContextAndRegister(RouteCollection routes, Object state) +105
System.Web.Mvc.AreaRegistration.RegisterAllAreas(RouteCollection routes, IBuildManager buildManager, Object state) +199
System.Web.Mvc.AreaRegistration.RegisterAllAreas(Object state) +45
System.Web.Mvc.AreaRegistration.RegisterAllAreas() +6
Website.MvcApplication.Application_Start() in C:\Users\djackson\Downloads\RestApiMvc3\Website\Website\Global.asax.cs:35
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.272
Probablemente esté relacionado con el hecho de que Route Debugger muestra que tengo algunas rutas antiguas que modifiqué o eliminé y que no desaparecerán (incluso después de reiniciar mi máquina). El seguimiento de la pila también se refiere a un archivo de origen que se eliminó hace mucho tiempo y mi aplicación se movió a una nueva ubicación, se limpió y se reconstruyó desde entonces. ¿Qué me estoy perdiendo?
Aquí está todo mi código de registro de ruta:
// in Global.asax.cs:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default2", // Route name
"Api/{controller}/{action}/{id}", // URL with parameters
new { controller = "DataSource", action = "Index", area = "Api", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
}
// in ApiAreaRegistration.cs:
public class ApiAreaRegistration : AreaRegistration
{
public override string AreaName { get { return "Api"; } }
public override void RegisterArea(AreaRegistrationContext context)
{
// DataSources
// Tables
context.MapRoute(
"ListTables",
// example:
// /api/DataSources/DataSource/1/schemata/schema/dbo/tables
"Api/DataSources/DataSource/{dataSourceId}/schemata/{schemaName}/tables",
new
{
controller = "Tables",
action = "TableList",
schemaName = "dbo",
dataSourceId = "DefaultId"
}
);
// Schemata
context.MapRoute(
"Schema",
// example:
// /api/DataSources/DataSource/1/schemata/schema/dbo
"Api/DataSources/DataSource/{dataSourceId}/schemata/{schemaName}",
new
{
controller = "Schema",
action = "Schema",
dataSourceId = "DefaultId",
schemaName = UrlParameter.Optional
}
);
// // DataSources
context.MapRoute(
"SingleDataSource",
"Api/DataSources/DataSource/{dataSourceId}",
new
{
controller = "DataSource",
action = "DataSource",
dataSourceId = UrlParameter.Optional
}
);
context.MapRoute(
"ListDataSources",
"Api/DataSources",
new
{
controller = "DataSource",
action = "DataSourceList",
dataSourceId = "DefaultId"
}
);
context.MapRoute(
"Api_default",
"Api/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
Respuestas:
Para solucionar este problema, tuve que ir a la carpeta bin de mi proyecto, eliminar todos los archivos DLL y luego reconstruir y esto solucionó el problema.
fuente
bin
carpeta.Este error puede ocurrir por múltiples causas, tuve el mismo error y lo resolví modificando la clase Global.asax.
El método Application_Start en Global.asax.cs era como:
La siguiente línea aparece dos veces en este método:
Esto aseguró que la ruta se agregara dos veces a la lista de rutas y al mismo tiempo causara el error.
Cambié el método Application_Start de la siguiente manera y el error desapareció:
Puede que esta no sea la respuesta a su problema, pero quizás pueda ayudar a otros en el futuro. No vi esta respuesta entre los demás, así que decidí agregar esto.
fuente
Descubrí que Global.asax se refería a una versión anterior del archivo DLL del sitio antes de cambiarle el nombre. La DLL no se estaba limpiando cuando hice Build> Clean up porque el proyecto / solución VS ya no se refería a ella. Parece que a veces solo se usaba la versión más nueva de la DLL, lo que permitía que el sitio funcionara correctamente, pero eventualmente ambos se cargarían y provocarían conflictos de ruta.
fuente
Las rutas se cargan desde todos los ensamblados dentro de AppDomain.CurrentDomain, por lo que si sus ensamblajes antiguos todavía son parte de eso, es posible que aún obtenga rutas antiguas / duplicadas.
fuente
En mi caso, me enfrenté a este problema, cuando agregué una referencia a otro proyecto de la solución, que también era MVC y usé los mismos nombres en el área (no quería agregar este proyecto, no sé cómo sucedió ). Cuando eliminé esta DLL, el proyecto comenzó a funcionar.
fuente
Eliminar las DLL por sí solo no funcionó para mí (en VS2013), pero eliminar todas las carpetas 'bin' y 'obj' y luego crear la solución funcionó perfectamente. Me hace desear no haber pasado tanto tiempo tratando de arreglarlo ...
fuente
Ninguna de las sugerencias funcionó para mí. Avancé y reinicié el servidor web (IIS en este caso) y eso borró el error después de haber arreglado el código. DLL debe haberse almacenado en caché en IIS.
fuente
prueba este código, solo cambia el nombre
fuente
Recibo el mismo error. Pero finalmente tengo la solución. Escenario: estoy agregando diferentes dll (aplicación mvc4) en mi aplicación web api mvc4. Cuando intente correr. Recibo el mismo error. Causa raíz: cuando mi aplicación web api se ejecuta .Application registra todas las áreas desde uno mismo y comienza a cargarse en las referencias dll del dominio de la aplicación actual. Cuando la aplicación carga la dll (aplicación MVC4), ese tiempo obtiene un error porque la ruta actual ya agrega la clave para "HelpPage_Default".
Solución. 1.Cambie la clave para RegisterArea en maproute, ya sea la aplicación actual o la aplicación existente (Consulte dll). 2.Mueva el código dll (aplicación mvc4) a otro liberary y consulte el nuevo dll.
fuente
Estaba llamando manualmente
AttributeRoutingHttpConfig.Start()
a mi Global.asax. No noté esta línea generada automáticamente en la parte superior del archivo que lo llama automáticamente.fuente
Tenía una aplicación que era una aplicación de formularios migrada a MVC con un componente de terceros utilizado para la autenticación que redirigía a otro sitio. El componente iniciaría una sesión dos veces si el usuario aún no había iniciado sesión (una vez para la conexión inicial al sitio y otra para regresar). Así que resolví esto con el siguiente código:
fuente
Eliminar los dlls en la carpeta bin funcionó al 100%, todavía tenía dlls que mi proyecto necesitaba reconstruir. Más bien haga una copia de la carpeta bin. luego borre el original y reconstruya el proyecto. si falla, coloque los archivos DLL que faltan en la carpeta bin.
fuente
Estaba ejecutando un sitio web antiguo de MVC2 y tuve este problema porque el 'Modo de canalización administrado' de IIS estaba configurado en 'Integrado' de forma predeterminada (presione F4 en el proyecto). Cambiarlo a 'Clásico' solucionó el problema
fuente
Al publicar en un servicio de aplicaciones de Azure, tuve que verificar la "Configuración" del cuadro de diálogo Publicar -> "Opciones de publicación de archivos" -> "Eliminar archivos adicionales en el destino" para eliminar la DLL del proyecto anterior y los archivos de símbolos. Entonces se cargaría el sitio.
Esta es esencialmente la solución de respuestas actuales (Fleas) en el núcleo. Elimine la DLL infractora.
Lo que causó que se conservara esta vieja DLL fue que estaba cargando una versión anterior del sitio web (plantillas MVC 3 ~ 5 pero un proyecto web diferente con espacios de nombres en colisión, ya que la versión más reciente era una copia de este proyecto que se hizo en algún momento en el pasado reciente. ) Las DLL del proyecto más reciente solo necesitaban ser eliminadas. Hay varias formas de lograrlo. Descubrí que usar un diálogo es el cajero automático más fácil. Iniciar sesión en el sistema de archivos y eliminar los archivos manualmente también funciona.
fuente