c# - route - Error 404 después de agregar la API web a una aplicación web MVC existente
web api return json example (3)
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).
"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/Understanding-the-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);
¡¡¡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);
}