¿Cómo agregar API web a un proyecto de aplicación web ASP.NET MVC 4 existente?

Deseo agregar una API web de ASP.NET a un proyecto de aplicación web ASP.NET MVC 4, desarrollado en Visual Studio 2012. ¿Qué pasos debo realizar para agregar una API web que funcione al proyecto? Soy consciente de que necesito un controlador derivado de ApiController, pero eso es todo lo que sé.

Avíseme si necesito proporcionar más detalles.

Los pasos que necesitaba realizar eran:

  1. Agregue referencia a System.Web.Http.WebHost .
  2. Agregue App_Start\WebApiConfig.cs (vea el fragmento de código a continuación).
  3. Importar espacio de nombres System.Web.Http en Global.asax.cs .
  4. Llame a WebApiConfig.Register(GlobalConfiguration.Configuration) en MvcApplication.Application_Start() (en el archivo Global.asax.cs ), antes de registrar la ruta predeterminada de la aplicación web, ya que de lo contrario tendría prioridad.
  5. Agregue un controlador derivado de System.Web.Http.ApiController .

Entonces podría aprender lo suficiente del tutorial (su primera API web ASP.NET) para definir mi controlador API.

App_Start \ WebApiConfig.cs:

 using System.Web.Http; class WebApiConfig { public static void Register(HttpConfiguration configuration) { configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}", new { id = RouteParameter.Optional }); } } 

Global.asax.cs:

 using System.Web.Http; ... protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); WebApiConfig.Register(GlobalConfiguration.Configuration); RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } 

Actualización 10.16.2015:

Word lo tiene, el paquete NuGet Microsoft.AspNet.WebApi debe instalarse para que lo anterior funcione.

ACTUALIZACIÓN 22/11/2013 – este es el último paquete de WebApi:

 Install-Package Microsoft.AspNet.WebApi 

Respuesta original (este es un paquete de WebApi más antiguo)

 Install-Package AspNetWebApi 

Más detalles

Para agregar WebAPI en mi proyecto MVC 5.

  1. Abre el administrador del paquete NuGet y ejecuta

     PM> Install-Package Microsoft.AspNet.WebApi 
  2. Agregue referencias a System.Web.Routing, System.Web.Net y System.Net.Http dlls si aún no lo ha hecho

  3. Haga clic con el botón derecho en la carpeta de controladores> agregar nuevo elemento> web> Agregar controlador de API web

  4. Web.config será modificado en consecuencia por VS

  5. Agregue el método Application_Start () {} si no está ya allí

     protected void Application_Start() { //this should be line #1 in this method GlobalConfiguration.Configure(WebApiConfig.Register); } 
  6. Agregue la siguiente clase (agregué en el archivo global.asax.cs)

     public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } } 
  7. Modifique el método web api en consecuencia

     namespace  { public class VSController : ApiController { // GET api/ : url to use => api/vs public string Get() { return "Hi from web api controller"; } // GET api//5 : url to use => api/vs/5 public string Get(int id) { return (id + 1).ToString(); } } } 
  8. Reconstruir y probar

  9. Construye una página html simple

            ....   

Tan pronto como agrega un “Controlador WebApi” en la carpeta de controladores, Visual Studio se ocupa de las dependencias automáticamente;

Visual Studio ha agregado el conjunto completo de dependencias para ASP.NET Web API 2 para proyectar ‘MyTestProject’.

El archivo Global.asax.cs en el proyecto puede requerir cambios adicionales para habilitar ASP.NET Web API.

  1. Agregue las siguientes referencias de espacio de nombres:

    utilizando System.Web.Http; usando System.Web.Routing;

  2. Si el código aún no define un método Application_Start, agregue el siguiente método:

    nulo protegido Application_Start () {}

  3. Agregue las siguientes líneas al comienzo del método Application_Start:

    GlobalConfiguration.Configure (WebApiConfig.Register);

Puede instalar desde nuget como la imagen de abajo:

enter image description here

O bien, ejecute la siguiente línea de comando en la consola de Package Manager:

 Install-Package Microsoft.AspNet.WebApi 

Antes de comenzar a fusionar proyectos MVC y Web API, sugeriría que leyera sobre inconvenientes y pros para separarlos como proyectos diferentes. Una cosa muy importante (la mía) es el sistema de autenticación, que es totalmente diferente.

SI necesita usar solicitudes autenticadas tanto en MVC como en la API web, debe recordar que la API web es RESTful (no es necesario mantener una sesión, solicitudes HTTP simples, etc.), pero MVC no lo hace.

Para ver las diferencias de las implementaciones, simplemente cree 2 proyectos diferentes en Visual Studio 2013 a partir de Plantillas: una para MVC y otra para API Web (no olvide activar “Autenticación individual” durante la creación). Verá mucha diferencia en AuthencationControllers.

Por lo tanto, ten en cuenta.

La solución anterior funciona perfectamente. Prefiero elegir la opción Web API mientras selecciono la plantilla del proyecto como se muestra en la siguiente imagen

Nota: la solución funciona con Visual Studio 2013 o superior. La pregunta original se formuló en 2012 y es 2016, por lo que se agrega una solución Visual Studio 2013 o superior.

Plantilla de proyecto que muestra la opción API web