Un itinéraire nommé «x» est déjà dans la collection de routes. Les noms de route doivent être uniques. Exception avec ASP.NET MVC 3

Je fais un service Web ASP.NET MVC 3 et je continue à recevoir cette exception par intermittence.

Trace de la stack:

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(Ssortingng name, RouteBase item) +2329682 System.Web.Mvc.RouteCollectionExtensions.MapRoute(RouteCollection routes, Ssortingng name, Ssortingng url, Object defaults, Object constraints, Ssortingng[] namespaces) +236 System.Web.Mvc.AreaRegistrationContext.MapRoute(Ssortingng name, Ssortingng url, Object defaults, Object constraints, Ssortingng[] namespaces) +59 System.Web.Mvc.AreaRegistrationContext.MapRoute(Ssortingng name, Ssortingng 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 

C’est probablement lié au fait que Route Debugger montre que j’ai certaines anciennes routes que j’ai modifiées ou supprimées et qui ne disparaîtront pas (même après le redémarrage de ma machine). La trace de stack fait également référence à un fichier source qui a été supprimé depuis longtemps et où mon application a été déplacée vers un nouvel emplacement, nettoyée et reconstruite depuis. Qu’est-ce que je rate?

Voici tout le code d’enregistrement de mon itinéraire:

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

Pour résoudre ce problème, je devais aller dans le dossier bin de mon projet, supprimer tous les fichiers DLL, puis reconstruire et cela a résolu le problème.

Cette erreur peut se produire pour des raisons multiples, j’ai eu la même erreur et résolu en modifiant la classe Global.asax.

La méthode Application_Start de Global.asax.cs ressemblait à:

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

La ligne suivante se produit deux fois dans cette méthode:

 RouteConfig.RegisterRoutes(RouteTable.Routes); 

Cela garantissait que l’itinéraire était ajouté deux fois à la liste des itinéraires et provoquait en même temps l’erreur.

J’ai changé la méthode Application_Start comme suit et l’erreur a disparu:

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

Cela peut ne pas être la solution à votre problème, mais peut-être aider les autres à l’avenir. Je n’ai pas vu cette réponse entre les autres, alors j’ai décidé d’append ceci.

J’ai découvert que Global.asax faisait référence à une ancienne version du fichier DLL du site avant de la renommer. La DLL n’était pas nettoyée lorsque j’ai créé Build> Clean car le projet / la solution VS ne s’y référait plus. Il semble que parfois, seule la version la plus récente de la DLL était utilisée, permettant au site de fonctionner correctement, mais les deux seraient éventuellement chargés provoquant des conflits de route.

Les itinéraires sont chargés à partir de tous les assemblys dans AppDomain.CurrentDomain, donc si vos anciens assemblys font toujours partie de cela, vous pouvez toujours obtenir d’anciens itinéraires / doublons.

Dans mon cas, j’ai été confronté à ce problème, lorsque j’ai ajouté une référence à un autre projet de la solution, qui était également MVC et utilisait les mêmes noms dans la zone (je ne voulais pas append ce projet, je ne sais pas comment cela s’est passé) ). Lorsque j’ai supprimé cette DLL, le projet a commencé à fonctionner.

La suppression des DLL seules n’a pas fonctionné pour moi (dans VS2013), mais la suppression complète des dossiers «bin» et «obj», puis la création de la solution ont parfaitement fonctionné! Je souhaite que je n’ai pas passé si longtemps à essayer de le réparer …

Aucune des suggestions n’a fonctionné pour moi. Avancez et redémarrez le serveur Web (IIS dans ce cas) et cela efface l’erreur après avoir corrigé le code. DLL doit avoir été mis en cache dans IIS.

Je reçois la même erreur. Mais finalement, j’ai une solution. Scénario: J’ajoute une autre DLL (application mvc4) dans mon application web api mvc4. Quand essayez de courir Je reçois la même erreur. Cause racine – Lorsque mon application web api est exécutée. L’application enregistre toute la zone de lui-même et commence à charger les références à la DLL de domaine d’application en cours. Lorsque l’application charge dll (application MVC4) cette fois-là, l’erreur est due au fait que maproute actuelle ajoute déjà la clé pour “HelpPage_Default”.

Solution. 1.Modifier la clé pour RegisterArea dans maproute soit l’application en cours, soit l’application existante (voir dll). 2.Déplacez le code dll (application mvc4) code vers liberary différent et faites référence à new dll.

J’appelais manuellement AtsortingbuteRoutingHttpConfig.Start() dans mon Global.asax. Vous n’avez pas remarqué cette ligne générée automatiquement en haut du fichier qui l’appelle automatiquement.

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

J’avais une application qui était une application Forms migrée vers MVC avec un composant tiers utilisé pour l’authentification qui était redirigé vers un autre site. Le composant démarrera une session deux fois si l’utilisateur n’était pas déjà connecté (une fois pour la connexion initiale au site et une fois pour le retour). J’ai donc résolu ce problème avec le code suivant:

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

La suppression des DLL dans le dossier bin fonctionnait à 100%, il me restait encore à dlls mon projet à reconstruire. Faites plutôt une copie du dossier bin. puis supprimez l’original. reconstruisez le projet. en cas d’échec, placez les DLL manquantes dans le dossier bin.