Wie funktioniert die ApiController Klasse arbeiten und sich Verhalten?
Ich untersucht, wie die Verwendung von APIs in ein MVC-Projekt, aber ich habe einige Zweifel daran. (Ich Schreibe in C# - Sprache, bevor jemand fragt).
So weit, dass ich weiß, dass der Api-route-Konfiguration wird in der WebApiConfig
Klasse und standardmäßig die route ist:
routeTemplate: "api/{controller}/{id}"
Durch, dies zu tun, wenn ich zum Beispiel einen jSon-request, das ich weiß, was URI ich habe zu nennen, um zu einem bestimmten Ergebnis.
Aber ich würde gerne mehr spezifisch, daher modifizierte ich die Api die route:
routeTemplate: "api/{controller}/{action}/{id}"
Mit dieser route werde ich in der Lage zu bauen, URI direkt eine bestimmte Aktion (Methode?) in meinem ApiController.
Außerdem habe ich gelernt, dass die /{controller}/
beim Aufbau des URI mit jSon, ist der name der Klasse. Das ist, wenn die Klasse ProductsController
den Namen der Domänencontroller, die ich habe zu verwenden, bauen Sie den URI nur /products
. (Also die gesamte URL wird /api/products
).
Hier Fragen sind:
Wenn ich eine ApiController Klasse mit nur Products
, ist es erkennbar als Teil einer URI? Oder die ApiController Klasse haben am Ende mit "Controller"?
Das nach einem tutorial habe ich meine ApiController il selben Ordner wie die anderen Controller. Ich weiß, dass ist möglich, Apis in verschiedenen Ordnern. So, ist, dass jede einzelne API automatisch erkannt MVC? Ich meine, , wo ich Sie zu speichern, sind Sie anerkannt als API?
Wenn dem so ist, konnte ich schließlich rufen eine API mit Sitz in einem anderen Projekt als die, die ich bin zu arbeiten auf?
Kann ich ein einzelnes Projekt erstellen (Klassenbibliothek) mit einer Sammlung von APIs?
Führt die route-Konfiguration ändern, wenn ich will, nennen eine API in eine eigene Projekt?
tun Sie wirklich wollen, eine URI wie
api/Product/Get/1
? Sollte nicht das verb von der HTTP-Anforderung definieren die Aktion?Er sagt nicht, er will eine Aktion genannt Bekommen. Die Aktion könnte alle möglichen Dinge wie z.B. api/Produkte/Zusammenfassung oder api/Products/Details
Ich sehe, was Sie bekommen, aber ist das nicht eine Korruption der REST? asp.net/web-api/overview/web-api-routing-and-actions/...
Vielleicht, mein Beispiel war schlecht, aber viele gute APIs haben mehr als nur CRUD-Operationen in Ihnen. Das ist meine Meinung wirklich.
InformationsquelleAutor krvl | 2013-09-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Oh, das sind viele Fragen... 🙂
Frage zu beantworten:
Wenn ich eine ApiController Klasse mit dem Namen nur Produkte, ist es erkennbar als Teil einer URI? Oder die ApiController Klasse haben am Ende mit "Controller"?
ASP.NET -Routing verwendet, Coonvention, also, so weit ich weiß, wenn Sie der Klasse den Namen, wie Sie möchten, nicht nach diesem übereinkommen, diese nicht erkannt werden, und Sie werden wahrscheinlich erhalten eine 404. Also um deine Frage zu beantworten, ja, der name ist am Ende mit
Controller
, es sei denn, Sie überschreiben die Standard-Konvention (siehe Mike Goodwin Antwort)., Indem Sie die folgenden eine Anleitung ich meine ApiController im gleichen Ordner wie die anderen Controller. Ich weiß, dass ist möglich, Apis in verschiedenen Ordnern. So ist jeder einzelne API automatisch erkannt MVC? Ich meine, wo ich Sie zu speichern, sind Sie anerkannt als API?
Den Ordner, spielt keine Rolle, ASP.NET sucht nach einer Klasse mit dem Namen übereinstimmt. Die Api-Controller erkannt werden, da API-Controllern, weil Sie Erben von der Basis ApiController eher als die Controller eine
Wenn dem so ist, könnte ich irgendwann Aufruf einer API befindet sich in einem anderen Projekt als dem ich arbeite? Kann ich ein einzelnes Projekt erstellen (Klassenbibliothek) mit einer Sammlung von APIs?
Hat die route-Konfiguration ändern, wenn ich will, nennen eine API in eine eigene Projekt?
Dies ist nicht klar... was meinst du mit "call" eine API? wenn die API in einem anderen Projekt wird es wohl sein, sitzen auf einer separaten Adresse zu finden... Alles, was Sie brauchen, ist direkt Ihre JSON-Anfrage an diese Adresse, so dass, wenn Sie mit jQuery so machen:
anstatt einfach dies:
(Nur hüten Sie sich vor cross-site-scripting-Probleme).
Hoffe das klärt die Dinge für Sie. Fühlen Sie sich frei zu Fragen, wenn etwas desnt' Sinn machen...
InformationsquelleAutor Tallmaris
In ASP.Net MVC können Sie die vollständige Kontrolle über den controller Lage und Instanziierung durch die Implementierung einer benutzerdefinierten controller factory.
Dies ist eine Klasse, die die
IControllerFactory
- Schnittstelle. Diese stellt Methoden für die Auswahl und die Instanziierung Controller basierend auf den eingehenden request-Kontext. Es hat auch Methoden für andere controller-lifecycle-Verhalten.Die Namenskonvention basiert Verhaltensweisen, die Sie sehen in standard-MVC sind einfach die Logik codiert in der Standard-controller factory (das ist der Typ
DefaultControllerFactory
komischerweise)Hier ist ein Beispiel, wie ein Kunde die controller factory:
http://www.mgolchin.net/posts/18/dive-deep-into-mvc-icontrollerfactory
Also die Antwort auf deine Fragen ist ja, Sie können tun, was Sie wollen, aber Nein, es ist nicht alles automatisch.
InformationsquelleAutor Mike Goodwin