web-dev-qa-db-fra.com

Différence entre le projet MVC 5 et le projet Web Api

Je suis nouveau sur ASP.NET MVC et Web API et j'essaie d’obtenir les bases. Selon nos connaissances, nous avons des modèles de projet dans VS 2013, nommés MVC, Web API et Both of them together.

J'ai suivi les didacticiels et appris que nous pouvons créer une API en utilisant MVC seul ainsi qu'avec le modèle API Web.

Alors, quelles sont les différences entre celles-ci, basées sur Architecture et Utilisation ?

132
loop

Fondamentalement, un contrôleur Web API est un contrôleur MVC, qui utilise HttpMessageResponse comme type de base de sa réponse, au lieu de ActionResponse. Ils sont les mêmes dans la plupart des autres aspects. La principale différence entre les types de projet est que le type de projet MVC Application ajoute des éléments spécifiques au Web, tels que les fichiers CSS, JavaScript par défaut et d'autres ressources nécessaires pour un site Web, qui ne sont pas nécessaires pour une API. 

MVC est utilisé pour créer des sites Web. Dans ce cas, Controllers renvoie généralement une View (réponse HTML, par exemple) aux requêtes du navigateur. Les API Web, d’autre part, sont généralement conçues pour être consommées par d’autres applications. Si vous souhaitez autoriser d'autres applications à accéder à vos données/fonctionnalités, vous pouvez créer une API Web pour faciliter cet accès. Par exemple, Facebook dispose d'une API afin de permettre aux développeurs d'applications d'accéder aux informations relatives aux utilisateurs utilisant l'application. Les API Web ne doivent pas nécessairement être destinées à la consommation publique. Vous pouvez également créer une API pour prendre en charge vos propres applications. Par exemple, nous avons créé une API Web pour prendre en charge la fonctionnalité AJAX de notre site Web MVC.

Microsoft a changé la façon dont ils présentent les différents modèles. Désormais, au lieu d'utiliser différents modèles pour différents types de projets, ils encouragent les développeurs à associer les technologies ASP.NET dans le même projet, selon les besoins. Microsoft appelle cette vNext.

UPDATE: Pour ASP.NET Core, l'API Web a été intégrée dans le type de projet MVC 6 et la classe ApiController est consolidée dans la classe Controller. Plus de détails sur: https://wildermuth.com/2016/05/10/Writing-API-Controllers-in-ASP-NET-MVC-6

175
Elad Lachmi

Mes deux centimes...

  1. Dans ASP.Net MVC - le MVC Controller décide de ce que devrait être le View - c'est-à-dire que le contrôleur décide de ce que l'utilisateur doit «voir» (en fonction du scénario ou du contexte actuel) lorsqu'il fait une demande.
  2. Dans ASP.Net Web Forms, les pages ASPX décident de ce que l'utilisateur doit «voir» lorsqu'il effectue une demande.
  3. Mais dans Web API, aucune des fonctions de l’API Web ne permet de contrôler ce que l’utilisateur doit “voir” lorsqu’il fait une demande.

L'API Web n'est PAS une technologie liée à des sites Web uniquement. Il peut être utilisé à des fins multiples - pas uniquement pour les sites Web. Donc, il ne connait pas la signification de rendering

Lectures complémentaires

  1. Planification des solutions Web aujourd'hui: formulaires Web, ASP.NET MVC, API Web et OWIN.
  2. API Web WCF ou ASP.NET? Mes deux cents sur le sujet
  3. La prochaine génération de .NET - ASP.NET vNext
  4. Mise en route avec ASP.NET MVC 6
70
Lijo

Contrôleur MVC dérivé de la classe de contrôleur. Dans MVC, vous pouvez retourner des vues. MVC achitecture utilise pour créer une application. Cependant, les sites Web sont utilisés pour fournir des données à diverses applications.

Web Api est piloté par un contrôleur Api et ne renvoie pas la vue.

Remarque: vous pouvez également créer une API Web à partir d'un contrôleur MVC, mais vous devez renvoyer le résultat sous forme de type de retour pris en charge par JsonResult ou d'autres API Web. 

0
Akshay Kapoor

En plus des réponses déjà fournies ici, il convient de noter que tout contrôleur héritant d'ApiController et ayant une action avec le verbe HTTP POST ne peut avoir qu'un seul paramètre d'entrée [FromBody]. Si vous utilisez un contrôleur MVC (dérivé de 'Controller'), vous pouvez avoir plusieurs paramètres de post-entrée.

0
barrypicker