名为“DefaultApi”的路径已在路径集合中

时间:2013-12-05 06:45:16

标签: c# asp.net asp.net-web-api asp.net-web-api-routing

这个问题可能看似重复,但这有点不同。 在SO的所有其他问题中,我注意到他们注册了多条路线。但就我而言,我只有一条路线。

我正在创建asp.net webapi(框架4.5)并且在RegisterRoutes()方法中只有一个路由 -

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "DefaultApi",
            url: "rest/{controller}/{id}",
            defaults: new { id = UrlParameter.Optional }
        );

    }

那为什么会抛出错误?

A route named 'DefaultApi' is already in the route collection. Route names must be unique. Parameter name: name

5 个答案:

答案 0 :(得分:21)

我在添加路线DefaultApi方面遇到了类似的问题。虽然我的ArgumentException堆栈跟踪中的确切“附加详细信息”消息是:

A route named 'MS_attributerouteWebApi' is already in the route collection.
Route names must be unique.

我当然确定我只添加了DefaultApi路由一次,但最后注意到在Global.asax的{​​{1}}方法中我调用了Application_Start两次虽然在下面 - 不是很明显 - 方式:

WebApiConfig.Register(..)

另一个严重的'copypasterites'案例!我只是删除了WebApiConfig.Register(GlobalConfiguration.Configuration); GlobalConfiguration.Configure(WebApiConfig.Register); 行,这解决了我的问题。

(我使用的是WEB API 2.0 / .NET 5)

答案 1 :(得分:9)

原因:重命名命名空间而不删除关联的bin和输出文件。

解决方案:从输出目录中手动删除 bin obj 文件夹。 (清理解决方案是不够的,一些有问题的残留文件仍会导致此问题。)

......无论如何,那是我的经历。

答案 2 :(得分:3)

很好,我根据user3038092的回复解决了这个问题。我在HttpConfiguration

中添加了它,而不是在路径集合中添加它
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "rest/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

它有效。

答案 3 :(得分:1)

如果您使用的是MVC4或MVC5应用程序。 然后将路径配置放在

WebApiConfig.cs和

还检查路由名称在两个文件中应该是唯一的,即RouteConfig.cs和WebApiConfig.cs

答案 4 :(得分:0)

我看到你调用控制器,但你没有像这样给出控制器名称:

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "DefaultApi",
            url: "rest/{controller}/{id}",
            defaults: new { controller="Home",action="Index",id = UrlParameter.Optional }
        );

    }

这意味着您为Index视图注册了HomeContrller,