No type was found that matches the controller named 'User'
Solution 1:
In my case, the controller was defined as:
public class DocumentAPI : ApiController
{
}
Changing it to the following worked!
public class DocumentAPIController : ApiController
{
}
The class name has to end with Controller!
Edit: As @Corey Alix has suggested, please make sure that the controller has a public access modifier; non-public controllers are ignored by the route handler!
Solution 2:
In my case after spending almost 30 minutes trying to fix the problem, I found what was causing it:
My route defined in WebApiConfig.cs
was like this:
config.Routes.MapHttpRoute(
name: "ControllersApi",
routeTemplate: "{controller}/{action}"
);
and it should be like this:
config.Routes.MapHttpRoute(
name: "ControllersApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
as you see it was interfering with the standard route defined in RouteConfig.cs
.
Solution 3:
In my case I was using Web API and I did not have the public
defined for my controller class.
Things to check for Web API:
- Controller Class is declares as
public
- Controller Class implements ApiController
: ApiController
- Controller Class name needs to end in
Controller
- Check that your url has the
/api/
prefix. eg. 'host:port/api/{controller}/{actionMethod}'