Ich habe mit ASP.NET MVC 4 Beta herumgespielt und sehe jetzt zwei Arten von Controllern: ApiController
und Controller
.
Ich bin wenig verwirrt darüber, in welchen Situationen ich einen bestimmten Controller auswählen kann.
Zum Beispiel: Wenn ich eine Ansicht zurückgeben möchte, muss ich sie verwenden ApiController
oder das Gewöhnliche Controller
? Mir ist bekannt, dass die WCF-Web-API jetzt in MVC integriert ist.
Da wir jetzt beide Controller verwenden können, kann jemand bitte angeben, in welchen Situationen er sich für den entsprechenden Controller entscheiden soll.
ApiController
undController
so , wenn Sie mit dem neueren .NET Sie ApiController Sorgen nicht mehr brauchen - docs.microsoft.com/en-us/aspnet/core/tutorials/first-web- apiAntworten:
Verwenden Sie Controller, um Ihre normalen Ansichten zu rendern. Die ApiController-Aktion gibt nur Daten zurück, die serialisiert und an den Client gesendet wurden.
hier ist der Link
Zitat:
ApiController sind auf die Rückgabe von Daten spezialisiert. Sie sorgen beispielsweise dafür, dass die Daten transparent in das vom Client angeforderte Format serialisiert werden. Außerdem folgen sie standardmäßig einem anderen Routing-Schema (wie in: Zuordnen von URLs zu Aktionen) und stellen gemäß Konvention eine REST-vollständige API bereit.
Sie könnten wahrscheinlich alles mit einem Controller anstelle eines ApiControllers mit etwas (?) Manueller Codierung tun. Am Ende bauen beide Controller auf der ASP.NET-Grundlage auf. Eine REST-vollständige API ist heutzutage jedoch eine so häufige Anforderung, dass WebAPI erstellt wurde, um die Implementierung einer solchen API zu vereinfachen.
Es ist ziemlich einfach, sich zwischen beiden zu entscheiden: Wenn Sie eine HTML-basierte Web- / Internet- / Intranet-Anwendung schreiben - möglicherweise mit dem gelegentlichen AJAX-Aufruf, der hier und da json zurückgibt - bleiben Sie bei MVC / Controller. Wenn Sie einem System eine datengesteuerte / REST-fähige Schnittstelle bereitstellen möchten, verwenden Sie WebAPI. Sie können natürlich beide kombinieren, wenn ein ApiController AJAX-Anrufe von einer MVC-Seite aus abwickelt.
Um ein Beispiel aus der Praxis zu geben: Ich arbeite derzeit mit einem ERP-System, das seinen Entitäten eine REST-vollständige API bietet. Für diese API wäre WebAPI ein guter Kandidat. Gleichzeitig bietet das ERP-System eine stark AJAX-fähige Webanwendung, mit der Sie Abfragen für die REST-vollständige API erstellen können. Die Webanwendung selbst könnte als MVC-Anwendung implementiert werden, wobei die WebAPI zum Abrufen von Metadaten usw. verwendet wird.
quelle
Welches möchten Sie lieber schreiben und pflegen?
ASP.NET MVC
ASP.NET-Web-API
quelle
Controller
Klasse abgeleitet .ApiController
nur um die: Controller
Arbeit kümmern. Können Sie auch ein neues Dot Net Core Controller-Beispiel hinzufügenJson()
Version. Es ist klarer und expliziter. Ich mag es nicht, wenn eine Menge schwarzer Magie versucht, herauszufinden, wie mein Code auf eine Anfrage reagieren wird.Ich liebe die Tatsache, dass MVC6 von ASP.NET Core die beiden Muster zu einem zusammengeführt hat, da ich oft beide Welten unterstützen muss. Es ist zwar richtig, dass Sie jede Standard-MVC optimieren
Controller
(und / oder Ihre eigenenActionResult
Klassen entwickeln) können, um sich wie eine zu verhaltenApiController
, aber es kann sehr schwierig sein, sie zu warten und zu testen: Darüber hinaus müssen die zurückgegebenen Controller- MethodenActionResult
mit anderen gemischt werden Die Rückgabe von Rohdaten / serialisiertenIHttpActionResult
Daten / Daten kann aus Entwicklersicht sehr verwirrend sein, insbesondere wenn Sie nicht alleine arbeiten und andere Entwickler mit diesem hybriden Ansatz auf den neuesten Stand bringen müssen.Die beste Technik, die ich bisher entwickelt habe, um dieses Problem in ASP.NET-Nicht-Core-Webanwendungen zu minimieren, besteht darin, das Web-API-Paket in die MVC-basierte Webanwendung zu importieren (und ordnungsgemäß zu konfigurieren), damit ich das Beste aus beiden herausholen kann Welten:
Controllers
für Ansichten,ApiControllers
für Daten.Dazu müssen Sie Folgendes tun:
Microsoft.AspNet.WebApi.Core
undMicrosoft.AspNet.WebApi.WebHost
./Controllers/
Ordner einen oder mehrere ApiController hinzu./App_Config/
Ordner die folgende Datei WebApiConfig.cs hinzu:Schließlich müssen Sie die oben genannte Klasse in Ihrer Startup- Klasse registrieren (entweder
Startup.cs
oderGlobal.asax.cs
, je nachdem, ob Sie die OWIN-Startup-Vorlage verwenden oder nicht).Startup.cs
Global.asax.cs
Dieser Ansatz - zusammen mit seinen Vor- und Nachteilen - wird in diesem Beitrag, den ich in meinem Blog geschrieben habe, näher erläutert .
quelle
Controller
Kurz gesagt, eine Rückgabe einer Json-serialisierten Zeichenfolge, die in eine Zeichenfolge eingeschlossenActionResult
ist, ist definitiv schwieriger zu testen und zu verwalten als eine,ApiController
die so eingestellt werden kann, dass eine Liste von[Serializable]
Elementen direkt zurückgegeben wird . Jede Testmethode wäre viel einfacher zu schreiben, da Sie nicht jedes Mal manuell de-serialisieren müssen: Dies gilt auch für nahezu jede Systemintegrationsaufgabe mit ASP.NET oder anderen Frameworks.Controllers
sind großartig, aberApiControllers
besser für RESTful-Aufgaben geeignet, zumindest in .NET Framework 4.xJede Methode in der Web-API gibt Daten (JSON) ohne Serialisierung zurück.
Um jedoch JSON-Daten in MVC-Controllern zurückzugeben, setzen wir den zurückgegebenen Aktionsergebnistyp auf JsonResult und rufen die Json-Methode für unser Objekt auf, um sicherzustellen, dass es in JSON gepackt ist.
quelle
Der Hauptunterschied besteht darin, dass die Web-API ein Dienst für jeden Client und alle Geräte ist und MVC Controller nur seinen Client bedient. Das gleiche, weil es MVC-Plattform ist.
quelle
Es ist ziemlich einfach, sich zwischen beiden zu entscheiden: Wenn Sie eine HTML-basierte Web- / Internet- / Intranet-Anwendung schreiben - möglicherweise mit dem gelegentlichen AJAX-Aufruf, der hier und da json zurückgibt - bleiben Sie bei MVC / Controller. Wenn Sie eine datengesteuerte / REST-fähige Schnittstelle für ein System bereitstellen möchten, verwenden Sie WebAPI. Sie können natürlich beide kombinieren, wenn ein ApiController AJAX-Anrufe von einer MVC-Seite aus abwickelt. Grundsätzlich wird Controller für MVC und API-Controller für Rest-API verwendet. Sie können beide in demselben Programm verwenden, wie Sie es benötigen
quelle