Multiple controller types were found that match the URL. This can happen if attribute routes on multiple controllers match the requested URL

danludwig picture danludwig · Jan 28, 2014 · Viewed 18.7k times · Source

...guess I'm the first to ask about this one?

Say you have the following routes, each declared on a different controller:

[HttpGet, Route("sign-up/register", Order = 1)]
[HttpGet, Route("sign-up/{ticket}", Order = 2)]

... you could do this in MVC 5.0 with the same code except for the Order parameter. But after upgrading to MVC 5.1, you get the exception message in the question title:

Multiple controller types were found that match the URL. This can happen if attribute routes on multiple controllers match the requested URL.

So the new RouteAttribute.Order property is only controller-level? I know in AttributeRouting.NET you can do SitePrecedence too. Is the only way to have routes like the above when all actions are in the same controller?

Update

Sorry, I should have mentioned these routes are on MVC controllers, not WebAPI. I am not sure how this affects ApiControllers.

Answer

Tony Borres picture Tony Borres · Sep 9, 2015

If you know that ticket will be an int you can specify that type in the route to help resolve the route:

[HttpGet, Route("sign-up/register")] [HttpGet, Route("sign-up/{ticket:int}")]

This approach worked for me, per user1145404's comment that includes a link to Multiple Controller Types with same Route prefix ASP.NET Web Api