Unterschied zwischen MVC 5 Project und Web Api Project


135

Ich bin neu in ASP.NET MVC und Web API und versuche, die Grundlagen zu erlernen. AFAIK, haben wir Projektvorlagen in VS 2013, mit dem Namen wie MVC, Web APIund Both of them together.

Ich habe die Tutorials durchgesehen und gelernt, dass wir eine API erstellen können, indem wir MVC allein und mit der Web-API-Vorlage verwenden.

Also, was sind die Unterschiede zwischen diesen, basierend auf Architektur und Nutzung ?

Antworten:


182

Grundsätzlich ist ein Web APIController ein MVCController, der HttpMessageResponseanstelle von den Basistyp seiner Antwort verwendet ActionResponse. Sie sind in den meisten anderen Punkten gleich. Der Hauptunterschied zwischen den Projekttypen besteht darin, dass der MVC ApplicationProjekttyp webspezifische Elemente wie Standard CSS, JavaScriptDateien und andere für eine Website erforderliche Ressourcen hinzufügt , die für eine API nicht benötigt werden.

MVC wird zum Erstellen von Websites verwendet. In diesem Fall wird Controllersnormalerweise eine View(dh HTML-Antwort) an Browseranforderungen zurückgegeben. Web-APIs hingegen werden normalerweise von anderen Anwendungen verwendet. Wenn Sie anderen Anwendungen den Zugriff auf Ihre Daten / Funktionen ermöglichen möchten, können Sie eine Web-API erstellen, um diesen Zugriff zu erleichtern. Facebook verfügt beispielsweise über eine API, mit der App-Entwickler auf Informationen zu Benutzern zugreifen können, die die App verwenden. Web-APIs müssen nicht für den öffentlichen Gebrauch bestimmt sein. Sie können auch eine API erstellen, um Ihre eigenen Anwendungen zu unterstützen. Beispielsweise haben wir eine Web-API erstellt, um die AJAX-Funktionalität unserer MVC-Website zu unterstützen.

Microsoft hat die Darstellung der verschiedenen Vorlagen geändert. Anstatt verschiedene Vorlagen für verschiedene Projekttypen zu verwenden, ermutigen sie Entwickler, ASP.NET-Technologien nach Bedarf innerhalb desselben Projekts zu mischen. Microsoft nennt das vNext.

UPDATE: Für ASP.NET Core wurde die Web-API in den MVC 6-Projekttyp integriert und die ApiControllerKlasse in der ControllerKlasse konsolidiert . Weitere Details unter: https://wildermuth.com/2016/05/10/Writing-API-Controllers-in-ASP-NET-MVC-6


1
Danke Elad, ich habe es bekommen. Kannst du deine Ans bearbeiten und etwas über Asp.net Identity und Web Api 2 hinzufügen? Nur einige, wie sie verwendet werden und davon profitieren. Nur ein paar Worte.
Schleife

Ich kann also in keiner Weise über die dektop-App auf eine Controller-Aktion zugreifen. auch wenn ich die richtige GET-Syntax verwende, um die URL aufzurufen?
Unbreakable

70

Meine zwei Cent...

  1. In ASP.Net MVCController entscheidet die MVC , was die sein soll View- dh der Controller entscheidet, was der Benutzer (basierend auf dem aktuellen Szenario oder Kontext) "sehen" soll, wenn er eine Anfrage stellt.
  2. In ASP.Net Web FormsASPX entscheiden die Seiten, was der Benutzer "sehen" soll, wenn er eine Anfrage stellt.
  3. In der Web-API gibt es jedoch keine Kontrolle / Befugnis für eine der Funktionen der Web-API, um zu entscheiden, was der Benutzer "sehen" soll, wenn er eine Anfrage stellt.

Die Web-API ist KEINE Technologie, die nur mit Websites verknüpft ist. Es kann für mehrere Zwecke verwendet werden - nicht nur für Websites. Es kennt also nicht die Bedeutung vonrendering

Weiterführende Literatur

  1. Planen von Weblösungen heute: Web Forms, ASP.NET MVC, Web API und OWIN.
  2. WCF- oder ASP.NET-Web-APIs? Meine zwei Cent zu diesem Thema
  3. Die nächste Generation von .NET - ASP.NET vNext
  4. Erste Schritte mit ASP.NET MVC 6

Ich kann anhand der verglichenen Codes nicht erkennen, warum WebAPI besser lesbar ist. Es sieht auch so aus, als ob dort etwas umgedreht ist, da es sich um die Web-API handelt, für die ein HTTP-Methodenattribut wie [HttpGet] erwartet wird. Überprüfen Sie einige WebAPI (und WebAPI 2) Code hier
Gobe

2
Die akzeptierte Antwort lautet "Grundsätzlich ist ein Web-API-Controller ein MVC-Controller". Das ist einfach falsch. In Ihrer Antwort wird darauf hingewiesen, dass der gesamte Punkt von WebAPI darin besteht, dass es sich nicht um MVC handelt, sondern sich nicht um das gesamte Gepäck und den Overhead für den Umgang mit "Ansichten" und "Rendern" kümmern muss. ... und WebApi-Controller müssen nicht einmal nur mit Websites verknüpft sein. Sehr gute Antwort - danke!
FoggyDay

0

MVC-Controller abgeleitet von Controller-Klasse. In Mvc können Sie Ansichten zurückgeben. Mvc-Architektur wird zum Erstellen einer Anwendung verwendet. Web-APIs werden jedoch verwendet, um Daten für verschiedene Anwendungen bereitzustellen.

Web-Api-Laufwerke werden vom Api-Controller ausgeführt und geben keine Ansicht zurück.

Hinweis: Sie können Web-API auch über den MVC-Controller erstellen, müssen jedoch das Ergebnis als JsonResult oder andere von Web-API unterstützte Rückgabetypen zurückgeben.


0

Zusätzlich zu den hier bereits gegebenen Antworten ist es erwähnenswert, dass jeder Controller, der von ApiController erbt und eine Aktion mit dem HTTP-Verb POST ausführt, nur einen [FromBody] -Eingabeparameter haben kann. Wenn Sie einen MVC-Controller verwenden (abgeleitet von 'Controller'), können Sie viele Post-Input-Parameter haben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.