Estou fazendo um serviço da Web ASP.NET MVC 3 e continuo recebendo essa exceção intermitentemente.
Rastreamento de pilha:
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
Provavelmente está relacionado ao fato de que o Route Debugger mostra que tenho algumas rotas antigas que modifiquei ou excluí e não irão embora (mesmo depois de reiniciar minha máquina). O rastreamento de pilha também se refere a um arquivo de origem que há muito foi excluído e meu aplicativo foi movido para um novo local, limpo e reconstruído desde então. o que estou perdendo?
Aqui está todo o meu código de registro de rota:
// 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 }
);
}
}
Respostas:
Para corrigir esse problema, tive que ir para a pasta bin no meu projeto, excluir todos os arquivos DLL e, em seguida, reconstruir e isso corrigiu o problema.
fonte
bin
pasta.Este erro pode ocorrer devido a várias causas, eu tive o mesmo erro e resolvi modificando a classe Global.asax.
O método Application_Start em Global.asax.cs era assim:
A seguinte linha ocorre duas vezes neste método:
Isso garantiu que a rota fosse adicionada duas vezes à lista de rotas e, ao mesmo tempo, causasse o erro.
Mudei o método Application_Start da seguinte maneira e o erro desapareceu:
Esta pode não ser a resposta para o seu problema, mas talvez possa ajudar outras pessoas no futuro. Não vi essa resposta entre os outros, então decidi adicionar isso.
fonte
Eu descobri que Global.asax estava se referindo a uma versão antiga do arquivo DLL do site antes de renomeá-lo. A DLL não estava sendo limpa quando eu fiz Build> Clean up porque o projeto / solução VS não se referia mais a ela. Parece que às vezes apenas a versão mais recente da DLL estava sendo usada, permitindo que o site funcionasse corretamente, mas eventualmente ambos seriam carregados causando os conflitos de rota.
fonte
As rotas são carregadas de todos os assemblies em AppDomain.CurrentDomain, portanto, se seus assemblies antigos ainda fazem parte disso, você ainda pode obter rotas antigas / duplicadas.
fonte
No meu caso, me deparei com esse problema, quando adicionei referência a outro projeto da solução, que também era MVC e utilizo os mesmos nomes na área (não queria adicionar esse projeto, não sei como aconteceu ) Quando removi essa DLL, o projeto começou a funcionar.
fonte
Excluir as DLLs sozinha não funcionou para mim (no VS2013), mas excluir as pastas 'bin' e 'obj' inteiras e, em seguida, construir a solução funcionou perfeitamente! Me faz desejar não ter passado tanto tempo tentando consertar ...
fonte
Nenhuma das sugestões funcionou para mim. Fui em frente e reiniciei o servidor web (IIS neste caso) e isso eliminou o erro depois que eu consertei o código. A DLL deve ter sido armazenada em cache no IIS.
fonte
tente este código, apenas mude o nome
fonte
Estou recebendo o mesmo erro. Mas finalmente encontrei a solução. Cenário: Estou adicionando uma dll (aplicativo mvc4) diferente em meu aplicativo mvc4 da API da web. Ao tentar correr. Estou recebendo o mesmo erro. Causa raiz- Quando meu aplicativo de API da web é executado .Application, registre toda a área de si mesmo e comece a carregar as referências de dll do domínio do aplicativo atual. Quando o aplicativo carrega dll (aplicativo MVC4) naquele momento, obtendo erro porque o maproute atual já adiciona a chave para "HelpPage_Default".
Solução. 1.Altere a chave para RegisterArea no maproute ou aplicativo atual ou aplicativo existente (consulte dll). 2. Mova o código dll do código (aplicativo mvc4) para outro liberary e consulte o novo dll.
fonte
Eu estava ligando manualmente
AttributeRoutingHttpConfig.Start()
no meu Global.asax. Não notei esta linha gerada automaticamente na parte superior do arquivo que o chama automaticamente.fonte
Eu tinha um aplicativo que era um aplicativo Forms migrado para MVC com um componente de terceiros usado para autenticação que redirecionava para outro site. O componente iniciaria uma sessão duas vezes se o usuário ainda não estivesse conectado (uma para a conexão inicial ao site e outra para o retorno). Resolvi isso com o seguinte código:
fonte
Excluir as dlls na pasta bin funcionou 100%, eu ainda tinha dlls que meu projeto precisava para reconstruir. Em vez disso, faça uma cópia da pasta bin. em seguida, exclua o original. reconstrua o projeto. se falhar, coloque as dlls ausentes na pasta bin.
fonte
Eu estava executando um site MVC2 antigo e tive esse problema porque o 'Modo de pipeline gerenciado' do IIS estava definido como 'Integrado' por padrão (pressione F4 no projeto). Mudar para 'Clássico' corrigiu o problema
fonte
Ao publicar em um Serviço de Aplicativo do Azure, tive que verificar as "Configurações" -> "Opções de Publicação de Arquivo" -> "Remover arquivos adicionais no destino" da caixa de diálogo Publicar para obter a DLL do projeto antigo e os arquivos de símbolo removidos. Então o site carregaria.
Esta é essencialmente a solução de respostas atuais (Fleas) no núcleo. Exclua a DLL incorreta.
O que fez com que esse DLL antigo fosse retido foi que eu estava carregando uma versão mais antiga do site (modelos MVC 3 ~ 5, mas projeto da web diferente com namespaces em conflito, já que a versão mais recente era uma cópia desse projeto feita em algum ponto no passado recente. ) As DLLs do projeto mais recente precisavam apenas ser excluídas. Existem várias maneiras de fazer isso. Eu descobri que usar um diálogo é o atm mais fácil. O login no sistema de arquivos e a transferência dos arquivos manualmente também funcionam.
fonte