Error 404 después de agregar la API web a una aplicación web MVC existente

Aquí hay una gran pregunta: ¿cómo agregar la API web a un proyecto de aplicación web ASP.NET MVC 4 existente?

Desafortunadamente, no fue suficiente para resolver mi problema. Lo he intentado dos veces para asegurarme de no haber hecho nada mal. Hice clic derecho en “Controladores” y agregué el elemento “Controlador Web API 2 con acciones, utilizando Entity Framework” donde seleccioné mi clase de modelo y el contexto db. Todo salió bien … pero aun así … cada vez que he intentado acceder / api / Rest recibo un error 404 (El nombre de mi controlador es RestController).

¡¡¡Esta funcionando!!! No quería creer, pero adivina qué, el problema estaba relacionado con la orden de enrutamiento Global.asax.

Si bien no funciona con:

 protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); GlobalConfiguration.Configure(WebApiConfig.Register); //I AM THE 4th BundleConfig.RegisterBundles(BundleTable.Bundles); } 

Funciona con:

 protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); //I AM THE 2nd FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } 

Loco, lo sé.

Si desea utilizar WebAPI dentro de un proyecto MVC (5) existente, debe seguir los siguientes pasos:
1.Añadir paquetes de WebApi:

 Microsoft.AspNet.WebApi Microsoft.AspNet.WebApi.Client Microsoft.AspNet.WebApi.Core Microsoft.AspNet.WebApi.WebHost Newtonsoft.Json 

2.Agregue el archivo App_Start carpeta App_Start :

 using System.Web.Http; namespace WebApiTest { public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API configuration and services // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } } } 

3. Agregue la siguiente línea a Glabal.asax :

 GlobalConfiguration.Configure(WebApiConfig.Register); 

Nota importante: debe agregar la línea anterior exactamente después de AreaRegistration.RegisterAllAreas();

 protected void Application_Start() { AreaRegistration.RegisterAllAreas(); //\\ GlobalConfiguration.Configure(WebApiConfig.Register); //\\ FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } 

“Al agregar nuevas rutas SIEMPRE TENGA EN CUENTA que tiene que agregar una ruta específica en la parte superior seguida de una ruta más genérica al final. De lo contrario, su aplicación web nunca recibirá un enrutamiento adecuado”.

Lo anterior es la cita de aquí: http://www.codeproject.com/Tips/771809/Comprender-el-Routing-Framework-in-ASP-NET-MVC

Sé que la respuesta ya está dada, pero esto podría ayudar a entender por qué tenemos que poner GlobalConfiguration.Configure (WebApiConfig.Register); antes de RouteConfig.RegisterRoutes (RouteTable.Routes);