Cómo agregar API web a una API existente ASP.NET Proyecto de Aplicación web MVC 4?


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

Avísame si necesito proporcionar más detalles.

Author: aknuds1, 2012-08-16

7 answers

Los pasos que necesitaba realizar fueron:

  1. Añádase una referencia a System.Web.Http.WebHost.
  2. Añadir App_Start\WebApiConfig.cs (ver fragmento de código a continuación).
  3. Importa el espacio de nombres System.Web.Http en Global.asax.cs.
  4. Llame a WebApiConfig.Register(GlobalConfiguration.Configuration) en MvcApplication.Application_Start() (en archivo Global.asax.cs), antes de registrar la ruta predeterminada de la Aplicación Web, ya que de lo contrario tendría prioridad.
  5. Añade un controlador derivado de System.Web.Http.ApiController.

Entonces podría aprender lo suficiente de el tutorial (Su Primera ASP.NET Web API) a 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);
}

Actualizar 10.16.2015:

Word lo tiene, el paquete NuGet Microsoft.AspNet.WebAPI debe estar instalado para que lo anterior funcione.

 421
Author: aknuds1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-16 06:38:15

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

Install-Package Microsoft.AspNet.WebApi

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

Install-Package AspNetWebApi

Más detalles.

 71
Author: cdeutsch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-21 06:42:29

Para agregar WebAPI en mi proyecto MVC 5.

  1. Abre NuGet Package manager consol y ejecuta

    PM> Install-Package Microsoft.AspNet.WebApi
    
  2. Añadir referencias al Sistema.Web.Enrutamiento, System.Web.Net y System.Net. Http dll si no existe ya

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

  4. Web.la configuración será modificada en consecuencia por VS

  5. Agregue el método Application_Start(){} si no existe ya

    protected void Application_Start()
    {
        //this should be line #1 in this method
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
    
  6. Añadir la siguiente clase (He añadido en global.asax.cs file)

    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 web 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. Construir 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>
    
 41
Author: kheya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-21 18:52:30

Tan pronto como agregue un "Controlador WebAPI" en la carpeta controllers, Visual Studio se encarga de las dependencias automáticamente;

Visual Studio ha añadido el conjunto completo de dependencias para ASP.NET Web API 2 para proyectar 'MyTestProject'.

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

  1. Agregue las siguientes referencias de espacio de nombres:

    Usando el Sistema.Web.Http; utilizar Sistema.Web.Enrutamiento;

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

    Protected void Application_Start() { }

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

    Configuración global.Configure (WebApiConfig.Register);

 25
Author: Teoman shipahi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-22 05:13:11

Puede instalar desde nuget como la siguiente imagen:

introduzca la descripción de la imagen aquí

O bien, ejecute la siguiente línea de comandos en la consola del Administrador de paquetes:

Install-Package Microsoft.AspNet.WebApi
 21
Author: Cuong Le,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-03 21:51:22

Antes de comenzar a fusionar proyectos MVC y Web API, le sugeriría leer sobre contras y pros para separarlos como proyectos diferentes. Una cosa muy importante (la mía) son los sistemas de autenticación, que es totalmente diferente.

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

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

Así que, ten cuidado.

 15
Author: Yarkov Anton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:44

La solución anterior funciona perfectamente. Prefiero elegir la opción Web API al seleccionar la plantilla del proyecto como se muestra en la imagen de abajo

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

Plantilla de proyecto que muestra la opción web API

 2
Author: Sankar Krishnamoorthy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-07 08:55:33