with tutorial started net asp apicontroller asp.net-mvc asp.net-mvc-4 asp.net-web-api visual-studio-2012

asp.net-mvc - tutorial - web api documentation



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

Deseo agregar una API web 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ísame si necesito dar más detalles.


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

Install-Package Microsoft.AspNet.WebApi

Respuesta original (este es un paquete antiguo de WebApi)

Install-Package AspNetWebApi

Más details .


Antes de comenzar a fusionar los proyectos MVC y API web, sugiero leer acerca de los contras y los profesionales 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 REST (no es necesario mantener la sesión, solicitudes HTTP simples, etc.), pero MVC no.

Para ver las diferencias de implementaciones, simplemente cree 2 proyectos diferentes en Visual Studio 2013 desde Plantillas: uno para MVC y otro para Web API (no olvide activar la "Autenticación individual" durante la creación). Verás mucha diferencia en los controladores de autenticacion.

Entonces, sé consciente.


La solución anterior funciona perfectamente. Prefiero elegir la opción API web al seleccionar la plantilla de proyecto como se muestra en la imagen a continuación

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


Los pasos que necesitaba realizar fueron:

  1. Agregar referencia a System.Web.Http.WebHost .
  2. Agregue App_Start/WebApiConfig.cs (vea el fragmento de código a continuación).
  3. Importe el 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 .

Luego 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 estar instalado para que funcione lo anterior.


Puede instalar desde nuget como la imagen de abajo:

O bien, ejecute la siguiente línea de comando en la Consola del Administrador de paquetes:

Install-Package Microsoft.AspNet.WebApi


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

Visual Studio ha agregado el conjunto completo de dependencias para ASP.NET Web API 2 al proyecto ''MyTestProject''.

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

  1. Agregue las siguientes referencias de espacio de nombres:

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

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

    inicio vacío de Application_Start () {}

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

    GlobalConfiguration.Configure (WebApiConfig.Register);


Para agregar WebAPI en mi proyecto MVC 5.

  1. Abra la consola de NuGet Package manager y ejecute

    PM> Install-Package Microsoft.AspNet.WebApi

  2. Agregue referencias a las dlls System.Web.Routing, System.Web.Net y System.Net.Http si aún no las tiene.

  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 aún no existe

    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. Modificar el método de la API en consecuencia

    namespace <Your.NameSpace.Here> { public class VSController : ApiController { // GET api/<controller> : url to use => api/vs public string Get() { return "Hi from web api controller"; } // GET api/<controller>/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

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script src="../<path_to_jquery>/jquery-1.9.1.min.js"></script> <script type="text/javascript"> var uri = ''/api/vs''; $(document).ready(function () { $.getJSON(uri) .done(function (data) { alert(''got: '' + data); }); $.ajax({ url: ''/api/vs/5'', async: true, success: function (data) { alert(''seccess1''); var res = parseInt(data); alert(''got res='' + res); } }); }); </script> </head> <body> .... </body> </html>