Ich erstelle eine ASP.NET MVC-Anwendung, die Client-Skript-lastig ist und JSON und jQuery verwendet, um das DOM zu bearbeiten.
Meines Wissens nach können sowohl Web API Controller als auch MVC Controller JSON zurückgeben.
Sollte ich in meinem Szenario einen Web-API-Controller oder einen MVC-Controller verwenden ?
json
asp.net-mvc
asp.net-web-api
Nil Pun
quelle
quelle
Antworten:
Web-API-Controller können in jeder ASP.NET-Anwendung erstellt und gehostet werden, nicht nur in MVC-Anwendungen. Ein offensichtlicher Grund für die Erstellung einer Web-API ist daher, dass Sie kein MVC-Front-End haben (z. B. klassische, von Ihrem Unternehmen / Ihrer Organisation gehostete RESTful-Webdienste).
MVC-Controller basieren normalerweise auf dem MVC-Framework. Wenn Sie sich die Standardvorlagen und den größten Teil der Arbeit der Community und Ihrer Kollegen ansehen, werden Sie feststellen, dass fast alle MVC-Controller unter Berücksichtigung der Ansicht implementiert sind.
Persönlich verwende ich MVC-Controller, wenn ich mit View () antworten möchte, und ich verwende eine Web-API für alles, was nicht von einer bestimmten Ansicht abhängig ist.
Natürlich gibt es einige Einschränkungen, aber wenn Sie das Modellbindungsverhalten von MVC nicht benötigen, Ihr Dienst datenzentriert ist und die Vorgänge datenzentriert sind (z. B. CRUD-Vorgänge), möchten Sie wahrscheinlich einen Web-API-Controller 'anstelle eines' Model-View Controllers '. Umgekehrt benötigen Sie stattdessen einen MVC-Controller, wenn Ihre Vorgänge auf die Ansicht ausgerichtet sind (z. B. dem Benutzer eine Benutzeradministrationsseite bereitstellen) oder wenn Sie die Modellbindung von MVC benötigen, um "Ajax-Partials" zu generieren (sehr unwahrscheinlich).
Persönlich verwende ich Web-API-Controller, um JSON-basierte RESTful-Clients zu steuern. Ich verwende MVC-Controller, um das grundlegende Browser-Routing und die Bereitstellung des SPA zu verwalten.
quelle
WebAPI dient zum Erstellen einer API. Wenn Sie möchten, dass jemand Ihre API in XML, JSON usw. verwenden kann, können Sie eine Web-API erstellen.
In Ihrem Fall müssen Sie nur mit dem Client in JSON sprechen.
Auch wenn Ihre Website hauptsächlich von Client-Skripten gesteuert wird, würden Sie dennoch ASP.NET MVC Controller verwenden, oder? Und da Sie Ihre Controller möglicherweise bereits logisch nach Entitäten unterteilt haben, ist es sinnvoll, diese JSON-Serving-Methoden hinzuzufügen, anstatt eine andere Klasse speziell für die Web-API zu erstellen.
Für Ihre spezielle Situation (wenn ich das richtig verstehe) würde ich mich also an Controller halten.
quelle
Die Antwort läuft darauf hinaus, Bedenken zu trennen, die Schaffung von Diensten zu beschleunigen und sich eher auf Konventionen als auf Konfigurationen zu verlassen.
Die Hauptverantwortung des Controllers besteht darin, als Koordinator zwischen der Ansicht und Ihrem Modell zu arbeiten, während die Hauptverantwortung der API darin besteht, an Daten zu arbeiten. Im Fall der API-Konventionen ist es wirklich einfach, CRUD-Operationen durchzuführen. Unten finden Sie die Zuordnung zwischen CRUD-Operation und HTTP-Aktionen
Mit APIs müssen Sie also keine separaten Aktionen erstellen und diese mit HTTP-Aktionen verknüpfen.
quelle
Das einzige Problem, das ich mit ApiController habe, ist, dass es standortbasiert und nicht bereichsbasiert ist. Eine Site kann nur einen Apicontroller-Unterordner haben, in dem Sie Ihre Controller-Methoden benennen können. Es gibt Situationen, in denen Sie den Controller-Namen in verschiedenen Bereichen duplizieren möchten:
domain.com/api/area1/controller1/
domain.com/api/area2/controller1/
Ich erinnere mich, dass es einige benutzerdefinierte Codeeinstellungen gibt, um dies zu tun, aber es funktioniert standardmäßig nicht.
quelle
Ich stimme der Antwort von Shaun Wilson (Top-Antwort) zu, bin mir aber nicht sicher, warum, da ich nur ein bisschen verwirrt bin und immer noch versuche, mit der folgenden (wahrscheinlich falschen) Vorahnung zu verstehen:
Sie sehen, ich weiß nur nicht, wie ich hier falsch liege, und bin verwirrt, weil in der letzten Zeile von Shauns Antwort steht: "Ich verwende MVC-Controller für das grundlegende Browser-Routing und die Bereitstellung des SPA." - Vielleicht weiß ich nicht genau, was ein erholsamer Client ist, als ich davon ausgegangen bin, dass es sich um eine JavaScript-Methode handelt, die eine Antwort in JSON-Form erhält. Dies ist der nächstgelegene Beitrag in Stackoverflow, der als Antwort auf meine Frage aus der Ferne in Beziehung gesetzt wurde. Daher beantworte ich diesen Beitrag, anstatt möglicherweise Fragen zu duplizieren.
quelle
In diesem Szenario würde ich WebApi empfehlen, da es sich perfekt für die Übertragung solcher Daten auf der Grundlage von Javascript-Anforderungen eignet. Normalerweise werde ich meine WebApi-Controller so entwickeln, dass sie ein JSON-freundliches Objekt zurückgeben, das dann von meinem Javascript einfach analysiert werden kann.
Die einzige Echtzeit, in der Sie eine Aktion auf einem MVC-Controller für diese Art von Dingen verwenden möchten, ist, wenn Sie HTML generieren und Segmente Ihrer Seite durch Javascript-Aufrufe ersetzen möchten.
Beispielsweise:
Sie haben einen JQuery UI Datepicker, der bei Auswahl eine Liste von Optionsfeldern generiert, die Ereignisse am ausgewählten Tag darstellen.
In diesem Szenario können Sie WebApi verwenden, um JSON zurückzugeben und dann das erforderliche HTML mit Javascript zu generieren. Im Allgemeinen ist es jedoch eine schlechte Praxis, viel HTML mit Javascript zu erstellen. Es wäre viel besser, wenn C # den HTML-Code erstellt und ihn dann über eine Teilansicht zurückgibt, da auf diese Weise weniger Fehler beim Parsen von Javascript auftreten. Ganz zu schweigen davon, dass das HTML viel einfacher zu schreiben ist.
quelle