I spent several hours working on a new web api controller that was giving "not found" responses from the web client.
Eventually I found that in another area of the web site, in a different name space with a different RoutePrefix I used the same controller name for a totally different context. By area, I mean that there were separate AreaRegistration implementations, folders, namespaces, routes, etc. for different modules of the asp.net web site. My Shipping area had a SkuAliasApiContoller which was referring to allowed substitutions and the sales order area had a SkuAliasApiController that referred to customer's aliases for SKUs. With these 2 identically named controllers, they both stopped each other from working.
Granted that it is a bad idea to use the same name for 2 controllers, but working on a team, I may never know about the other area's code.
There were no warnings from Visual Studio 2017, no errors from the asp.net routing engine. It just dropped both controllers from the routing.
Seems like this is a bug in the routing.