【问题标题】:A route named 'DefaultRoute' is already in the route collection. Route names must be unique名为“DefaultRoute”的路由已在路由集合中。路由名称必须是唯一的
【发布时间】:2015-03-27 12:46:06
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

  • 在您的解决方案中搜索RouteTable 并检查您是否在其Routes 集合中映射了多个名称为“默认”的路线。
  • 仔细检查,这样您就不会在全局 asax 和 OWIN 启动类中进行路由初始化。
  • @HamletHakobyan - 我如何检查 RouteTable?

标签: c# asp.net-mvc iis asp.net-web-api restsharp


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 是的 - 我也是,重命名了一个项目,但旧的 .DLL 仍然存在,一旦我删除它,问题就消失了
    • 这里也一样。在调整了项目命名空间的分支之间切换,导致不同的 dll。清理它有帮助。谢谢!
    • 删除 bin 文件夹就足够了(感谢分享有关旧 dll 的问题)。
    【解决方案3】:

    当我有使用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(...)
    {
        ...
    }
    

    【讨论】:

      【解决方案4】:
      1. 签入 Global.asax

      你已经被定义了两次。

      AreaRegistration.RegisterAllAreas();

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

      【讨论】:

        【解决方案5】:

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

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

        希望这会有所帮助。

        【讨论】:

          【解决方案6】:

          只需清理解决方案并再次重建!

          它为我解决了问题

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 2016-05-01
              • 1970-01-01
              • 1970-01-01
              • 2018-04-27
              • 2012-06-14
              • 2013-12-21
              • 2014-12-10
              • 2012-04-24
              • 2016-01-11
              相关资源
              最近更新 更多