A route named 'DefaultApi' is already in the route collection

Anil Purswani picture Anil Purswani · Dec 5, 2013 · Viewed 17k times · Source

This question may seems duplicate but this is slightly different. In all other question in SO I had noticed that they have multiple routes registered. but in my case I have just one route.

I am creating asp.net webapi (framework 4.5) and have just one route in RegisterRoutes() method -

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

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

    }

Then why is it throwing error?

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

Answer

Bart picture Bart · May 8, 2014

I had a similar issue with adding a route DefaultApi. Though the exact 'additional details' message in my ArgumentException stack trace was:

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

I ofcourse made sure I was adding the DefaultApi route only once, but in the end noticed that in Global.asax's Application_Start method I was calling the WebApiConfig.Register(..) twice, though in the following - not immediately obvious - way:

WebApiConfig.Register(GlobalConfiguration.Configuration);
GlobalConfiguration.Configure(WebApiConfig.Register);

Another serious case of 'copypasterites'! I simply removed the WebApiConfig.Register(..) line and that fixed my issue.

(I am using WEB API 2.0/.NET 5)