Diferencia entre MVC 5 Project y Web Api Project


135

Soy nuevo en ASP.NET MVC y Web API y estoy tratando de obtener lo básico. AFAIK, tenemos plantillas de proyecto en VS 2013, nombradas como MVC, Web APIyBoth of them together .

Revisé los tutoriales y aprendí que podemos hacer una API usando MVC solo, así como con la plantilla de API web.

Entonces, ¿cuáles son las diferencias entre estos, según la arquitectura y el uso ?

Respuestas:


182

Básicamente, un Web APIcontrolador es un MVCcontrolador, que utiliza HttpMessageResponsecomo tipo base de su respuesta, en lugar de ActionResponse. Son iguales en la mayoría de los otros aspectos. La principal diferencia entre los tipos de proyecto es que el MVC Applicationtipo de proyecto agrega elementos específicos de la web como valores predeterminados CSS, JavaScriptarchivos y otros recursos necesarios para un sitio web, que no son necesarios para una API.

MVC se utiliza para crear sitios web. En este caso, Controllersgeneralmente se devuelve un View(es decir, una respuesta HTML) a las solicitudes del navegador. Las API web, por otro lado, generalmente están hechas para ser consumidas por otras aplicaciones. Si desea permitir que otras aplicaciones accedan a sus datos / funcionalidad, puede crear una API web para facilitar este acceso. Por ejemplo, Facebook tiene una API para permitir a los desarrolladores de aplicaciones acceder a información sobre los usuarios que usan la aplicación. Las API web no tienen que ser para consumo público. También puede crear una API para admitir sus propias aplicaciones. Por ejemplo, creamos una API web para admitir la funcionalidad AJAX de nuestro sitio web MVC.

Microsoft cambió la forma en que presentan las diferentes plantillas. Ahora, en lugar de usar diferentes plantillas para diferentes tipos de proyectos, alientan a los desarrolladores a mezclar tecnologías ASP.NET dentro del mismo proyecto según sea necesario. Microsoft llama a esto vNext.

ACTUALIZACIÓN: Para ASP.NET Core, la API web se ha integrado en el tipo de proyecto MVC 6 y la ApiControllerclase se consolida en la Controllerclase. Más detalles en: https://wildermuth.com/2016/05/10/Writing-API-Controllers-in-ASP-NET-MVC-6


1
Gracias, Elad, lo tengo. ¿Puede hacer una edición en sus respuestas y agregar algo sobre Asp.net Identity y Web Api 2? ¿Cómo se van a usar y beneficiar? Solo algunas palabras.
loop

Por lo tanto, de ninguna manera puedo acceder a una acción del controlador desde la aplicación dektop. incluso si uso la sintaxis GET adecuada para llamar a la URL?
Irrompible el

70

Mis dos centavos...

  1. En ASP.Net MVC , los MVC Controllerdeciden lo que debería ser View, es decir, el controlador decide lo que el usuario debe "ver" (según el escenario o contexto actual), cuando hace una solicitud.
  2. En ASP.Net Web Forms , las ASPXpáginas deciden lo que el usuario debe "ver" cuando hace una solicitud.
  3. Pero en la API web , no hay control / poder sobre ninguna de las funciones de la API web para decidir qué debe "ver" el usuario cuando realiza una solicitud.

Web API NO es una tecnología vinculada solo a sitios web. Se puede utilizar para múltiples propósitos, no solo para sitios web. Entonces no sabe el significado derendering

Otras lecturas

  1. Planificación de soluciones web hoy: formularios web, ASP.NET MVC, API web y OWIN.
  2. ¿API web WCF o ASP.NET? Mis dos centavos sobre el tema
  3. La próxima generación de .NET - ASP.NET vNext
  4. Comenzando con ASP.NET MVC 6

No puedo decir por los códigos comparados por qué WebAPI es más legible. Además, parece que hay algo invertido allí, ya que es la API web la que se espera que tenga un atributo de método HTTP como [HttpGet]. Verifique el código de WebAPI (y WebAPI 2) aquí
Gobe

2
La respuesta aceptada dice "Básicamente, un controlador API web es un controlador MVC". Eso simplemente está mal. Su respuesta señala que todo el PUNTO de WebAPI es que NO ES MVC, NO tiene que lidiar con todo el equipaje y los gastos generales para lidiar con "Vistas" y "renderizado". ... y los controladores WebApi ni siquiera tienen que estar vinculados solo con sitios web. Muy buena respuesta, ¡gracias!
FoggyDay

0

Controlador MVC derivado de la clase de controlador. En Mvc puede devolver vistas. La arquitectura de Mvc se utiliza para crear una aplicación. Sin embargo, las API web se utilizan para proporcionar datos a diversas aplicaciones.

Web Api conduce desde el controlador Api y no devuelve la vista.

Nota: También puede crear API web desde el controlador MVC, pero debe devolver el resultado como JsonResult u otros tipos de devolución compatibles con API web.


0

Además de las respuestas ya proporcionadas aquí, vale la pena señalar que cualquier controlador que herede de ApiController y que tenga una acción con el verbo Http POST solo puede tener un parámetro de entrada [FromBody]. Si utiliza un controlador MVC (derivado de 'Controlador'), puede tener muchos parámetros de entrada posteriores.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.