asp.net-mvc - with - web api rest c#




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

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 .

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.


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.


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

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>
    




visual-studio-2012