All ASP.NET Web API controllers return 404

asp.net-mvc, asp.net-mvc-4, asp.net-web-api

Solution

One thing I ran into was having my configurations registered in the wrong order in my GLobal.asax file for instance:

Right Order:

AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);

Wrong Order:

AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
WebApiConfig.Register(GlobalConfiguration.Configuration);

Just saying, this was my problem and changing the order is obvious, but sometimes overlooked and can cause much frustration.

Problem

I'm trying to get an API Controller to work inside an ASP.NET MVC 4 web app. However, every request results in a 404 and I'm stumped. :/ I have the standard API controller route from the project template defined like: ``` public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } } ``` The registration is invoked in Global.asax: ``` protected void Application_Start() { AreaRegistration.RegisterAllAreas(); // Register API routes WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); } ``` I have a basic API controller like this: ``` namespace Website.Controllers { public class FavoritesController : ApiController { // GET api/<controller> public IEnumerable<string> Get() { return new [] { "first", "second" }; } // PUT api/<controller>/5 public void Put(int id) { } // DELETE api/<controller>/5 public void Delete(int id) { } } } ``` Now, when I browse to localhost:59900/api/Favorites I expect the Get method to be invoked, but instead I get a 404 status code and the following response: ``` <Error> <Message> No HTTP resource was found that matches the request URI 'http://localhost:59900/api/Favorites'. </Message> <MessageDetail> No type was found that matches the controller named 'Favorites'. </MessageDetail> </Error> ``` Any help would be greatly appreciated, I'm losing my mind a little bit over here. :) Thanks!

Original source

Related problems