asp.net asp.net-mvc-3 asp.net-mvc-3-areas

Una ruta llamada "x" ya está en la colección de ruta. Los nombres de ruta deben ser únicos. Excepción con ASP.NET MVC 3



asp.net-mvc-3 asp.net-mvc-3-areas (11)

Estoy haciendo un servicio web ASP.NET MVC 3 y sigo obteniendo esta excepción de forma intermitente.

Stack trace:

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 he modificado o eliminado 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 fuente 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 el código de mi ruta de registro:

// 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 } ); } }


Descubrí que Global.asax se estaba refiriendo a una versión anterior del archivo DLL del sitio antes de renombrarlo. La DLL no se estaba limpiando cuando hice Build> Clean porque el proyecto / solución de VS ya no se refería a ella. Parece que a veces solo se usaba la versión más reciente de la DLL, lo que permitía que el sitio funcionara correctamente, pero al final ambos se cargaban, lo que causaba conflictos en la ruta.


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ó a la perfección. Me hace desear no haber pasado tanto tiempo tratando de arreglarlo ...


Eliminar los dlls en la carpeta bin funcionó al 100%, todavía tenía dlls que mi proyecto necesitaba para reconstruir. Más bien haga una copia de la carpeta bin. luego elimine el original. reconstruya el proyecto. si falla, coloca los dlls faltantes en la carpeta bin.


En mi caso, me enfrenté a este problema, cuando agregué referencia a otro proyecto de solución, que también era MVC y usaba 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.


Estaba llamando manualmente a AttributeRoutingHttpConfig.Start() en mi Global.asax. No noté esta línea generada automáticamente en la parte superior del archivo que lo llama automáticamente.

[assembly: WebActivator.PreApplicationStartMethod(typeof(Mev.Events.Web.AttributeRoutingHttpConfig), "Start")]


Este error puede ocurrir debido a causas múltiples, tuve el mismo error y lo resolví modificando la clase Global.asax.

El método Application_Start en Global.asax.cs fue como:

protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); RouteConfig.RegisterRoutes(RouteTable.Routes); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); BundleConfig.RegisterBundles(BundleTable.Bundles); }

La siguiente línea aparece dos veces en este método:

RouteConfig.RegisterRoutes(RouteTable.Routes);

Esto aseguró que la ruta se agregó dos veces a la lista de rutas y al mismo tiempo causó el error.

Cambié el método Application_Start de la siguiente manera y el error desapareció:

protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); BundleConfig.RegisterBundles(BundleTable.Bundles); }

Puede que esta no sea la respuesta para 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.


Estoy recibiendo el mismo error. Pero finalmente tengo solución. Escenario: agrego un dll diferente (aplicación mvc4) en mi aplicación web api mvc4. Cuando intentas correr Estoy recibiendo el mismo error. Causa raíz: cuando mi aplicación web api ejecuta .Application, registre toda el área de mí mismo y comience a cargar las referencias dll del dominio de aplicación actual. Cuando la aplicación carga dll (aplicación MVC4) ese tiempo obtiene el error porque el maproute actual ya agrega la clave para "HelpPage_Default".

Solución. 1. Cambie la clave para RegisterArea en ruta de mapa ya sea aplicación actual o aplicación existente (consulte dll). 2.Mueva el código del código dll (aplicación mvc4) a diferentes liberarios y refiérase a la nueva dll.


Las rutas se cargan desde todos los ensamblajes dentro de AppDomain.CurrentDomain, por lo que si sus ensamblajes anteriores aún son parte de eso, es posible que todavía esté recibiendo rutas antiguas / duplicadas.


Ninguna de las sugerencias funcionó para mí. Se adelantó y reinició el servidor web (IIS en este caso) y eso borró el error después de haber arreglado el código. La DLL debe haberse almacenado en caché en IIS.


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.


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 para la conexión inicial al sitio y otra para la devolución). Así que resolví esto con el siguiente código:

if (routes.Count < 3) { routes.IgnoreRoute("login.aspx"); routes.IgnoreRoute("default.aspx"); routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new {action = "Index", id = UrlParameter.Optional} ); }