áreas de reparto en la URL de la API web
Usted simplemente tiene que registrar la ruta de la API web.
Pero esta ruta debe estar registrada antes que las otras rutas. De lo contrario, las solicitudes a la API web se manejarán por error como si fueran una acción de MVC.
Al utilizar áreas, debe tener en cuenta que el registro de las rutas de áreas generalmente se realiza antes del registro de las rutas que no son de área. YO.e, en Global.asax Application_Start
usted tiene estas líneas de código, en este orden:
AreaRegistration.RegisterAllAreas();
// ...
RouteConfig.RegisterRoutes(RouteTable.Routes);
La primera llamada al método invocará el método de todos los RegisterArea
encontró xxxAreaRegistration
clase. Y, dentro de esta configuración por lo general tendrá algo como esto:
context.MapRoute(
"AreaName_default",
"AreaName/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
Si usted quiere tener controladores de API Web dentro de esta área, debe agregar la ruta API Web antes de éste, así:
context.Routes.MapHttpRoute("AreaName_WebApiRoute",
"AreaName/Api/{controller}/{id}",
new { id = RouteParameter.Optional });
En este caso, supongo que desea invocar sus controladores de API usando una url como esta: /AreaName/Api/ControllerName/Id
.
Normalmente guardo los controladores de API web dentro de una carpeta Api
dentro de la carpeta de área, pero no importa dónde los coloque. Tenga en cuenta que los controladores API se encontrarán donde estén y, si usa el mismo nombre para ellos en diferentes áreas, obtendrá conflictos: se encuentran por el nombre de la clase, no por los completamente calificados (espacio de nombres) nombre.
En pocas palabras: no hay soporte real para las áreas, pero puede incluirlas en sus propias carpetas dentro de las áreas, y ponerlas a disposición en URL que se parecen a las de los controladores MVC dentro de las áreas.
apoyo espacios de nombres de ruta
¿Qué pasa si usted quiere tener controladores de API Web con el mismo nombre en diferentes áreas? Si realmente desea dar soporte real para las áreas a los controladores de API web, debe implementar y registrar un IHttpControllerSelector personalizado.
que tenga una buena explicación, y una implementación de ejemplo aquí: ASP.NET Web API: Using Namespaces to Version Web APIs
este ejemplo se utiliza espacios de nombres para el control de versiones, pero el código puede ser modificado ligeramente a favor de las áreas de espacios de nombres.
Gracias. Resultó que nada mío funcionaba porque registré mi/api/route después de la ruta predeterminada, que capturaba todas las llamadas de API –
¿Puedo tener 2 Global.asax para el sitio WebAPI y asp.net 4? – Cris
¡Compañero, hiciste mi día! Muchas gracias. – Rikki