名为“DefaultRoute”的路径已在路径集合中。 路线名称必须是唯一的

当我将ASP.NET WebAPI解决方案发布到远程IIS Server ,我收到错误消息:

消息:System.ArgumentException:名为“DefaultRoute”的路由已在路径集合中。 路线名称必须是唯一的。

我看到这个线程有同样的问题,但它没有任何效果。 我试过了:

  1. 删除所有项目中的所有bin / obj文件夹。
  2. 清洗/重建
  3. 在发布之前从远程服务器上删除文件
  4. 重命名项目

无论如何,我可以找出是否存在陈旧文件。 我确实重命名了一些文件,我听说这可能会导致问题?

不确定这是否重要,但我使用ASP.NET WebApi和RestSharp进行rest调用。

这就是我的Global.asax startup拥有的:它是多余的吗?

 AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); RouteConfig.RegisterRoutes(RouteTable.Routes); 

我已经设定路线遇到了类似的问题。 对我来说,解决方案在这里: https : //stackoverflow.com/a/28503674/1496138 。 问题是我后来重命名为项目文件 – 以前名称的旧DLL文件仍然存在于/ bin目录中,并且自动启动配置也运行它们。

路由通常配置为三个位置之一。 global.asax文件,RouteConfig.cs文件(通常位于/ App_Start或{areaname} AreaRegistration.cs文件中,位于/ Areas / {areaname}中。在这些位置必须有重复的路由名称。它给你重复的名称,尝试在你的项目中搜索“DefaultRoute”,它可能会跳出来。更改其中一个的名称,它应该解决你的问题。

当我使用RouteAttribute显式设置路由名称的代码时,我遇到了这个错误,当我尝试设置一个路由时,根据是否使用HTTP GET或HTTP POST调用它将采用不同的参数:

 [HttpGet] [Route("MyApiMethod", Name = "MyApiMethod")] public MyApiMethod PropertyData(...) { ... } // ERROR: Causes "System.ArgumentException: A route named 'DefaultRoute' is already in the route collection. Route names must be unique." [HttpPost] [Route("MyApiMethod", Name = "MyApiMethod")] public MyApiMethod PropertyData(...) { ... } 

这对我来说并不是很明显,但问题结果正是错误信息所说的:我有两条具有相同Name值的路由。 只需将这些Name值更改为唯一(无需更改路径本身或方法签名)即可解决问题:

 [HttpGet] [Route("MyApiMethod", Name = "MyApiMethod-GET")] public MyApiMethod PropertyData(...) { ... } [HttpPost] [Route("MyApiMethod", Name = "MyApiMethod-POST")] public MyApiMethod PropertyData(...) { ... } 
  1. 检查Global.asax

两次你被定义了。

AreaRegistration.RegisterAllAreas();

  1. 卸载项目和重新加载项目。

我有同样的问题。 如果您使用IIS 8.X,则应检查新function。

  1. 您的应用程序池启动模式应为高级设置中的“AlwaysRunning”
  2. 您的应用程序PreLoad Enabled应在高级设置中设置为“True”

希望这可以帮助。

只需清理洗脱和重建!

它解决了我的问题

清理解决方案/项目对我来说不起作用。 我最终导航到bin目录并删除目录中的所有文件,因为它是一个绝对的混乱,这解决了我的问题。