Verbrauchen ASP.NET WebApi von MVC-controller
Habe ich begonnen, die Arbeit an einem neuen Projekt, wo ich bin freilegen-client-Funktionalität über WebApi, so dass ich Sie wiederverwenden können, die dieselbe Funktionalität über mehrere Geräte hinweg, aber es gibt einige Funktionen, die geteilt wurde, zwischen mobilen Geräten und dem Host-Anwendung.
Meine Frage ist, obwohl ich weiß, wie Sie verbrauchen die WebApi von Geräten, die ich bin Zusammenstellung ein bisschen leer auf dem besten Weg, die besten Praktiken, oder einfach nur etwas, das funktioniert, wie verbrauchen die WebApi von innerhalb der MVC-Projekt, das hosting der api.
Mein Erster Gedanke wäre, nur instanzieren der Controller benötigt die Art und Weise, ich würde jede andere Klasse aber ich habe den leisen Verdacht, dass es zwar Arbeit ist dies ein schlechter Ansatz.
Der andere Gedanke wäre die Verwendung der HttpClient. Obwohl ich ' ve hatte kein Glück mit es wie ich finde nie die api
var client = new HttpClient(new HttpServer(GlobalConfiguration.Configuration));
client.PutAsJsonAsync("/api/project/login", Json(model));
- Warum hat die Anwendung verwenden müssen Ihre eigenen nach außen gerichteten API? Wenn Sie in der Anwendung benötigt Funktionen, die die API, kann es nicht einfach so nennen, die Funktion direkt? Wenn Sie ein WebAPI-Methode und einer Controller-Methode, die brauchen, um das gleiche zu tun, das "gleiche Ding" sollte abstrahiert werden, in eine Funktion oder ein Objekt im shared code und diese beiden Methoden nennen es intern.
- +1 zu den oben genannten; auch wenn Sie zwei separate Lösungen können Sie einfach auf eine von den anderen-und direkt verbrauchen die Objekte, aus denen die WebAPI...
- Antwort auf deine zweite Ansatz kann im folgenden gefunden werden. asp.net/web-api/overview/web-api-clients/...
- Naja David, ich Stimme mit Ihnen überein, aber ich denke es wird davon abhängen, das Projekt, business/infra Anforderungen, die in einer verteilten Anwendung am besten wäre es, die API zu verwenden, um die Datenbank und/oder Logik als einem zentralen "access point", ist es besser dann verschiedene Versionen einer DLL in eine Menge von Lösungen, die auf Servern oder Geräten wie Smartphones, Tablets oder Windows-Anwendungen. In einer verteilten Lösung, die Sie nicht behandeln können es intern selbst wenn eine Ihrer apps befindet sich im selben server wegen Wartungsarbeiten. Ich habe eine Lösung in diesem Szenario. Aber wieder habe ich mit Ihnen einverstanden, wenn die Lösung zulässt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eine etwas subjektive Frage, denn es ist wirklich nicht eine "richtige" Antwort. Im wesentlichen müssen Sie mehrere Punkte berücksichtigen.
Im wesentlichen, wenn die API-und MVC-Anwendung haben Unterschied betrifft, dann sollten Sie entsprechend getrennt und die MVC-Anwendung aufrufen soll die WebAPI Anwendung mit dem HttpClient. Dies kann reduzieren Angriffsmethoden und separate Anwendung betrifft, sehr gut.
Wenn die MVC und WebAPI sind sowohl die Freilegung der gleichen information und Sicherheit/Trennung von Bedenken ist nicht ein Problem, dann die Abhängigkeit auflösen der controller sollte ausreichen.
Wenn die Logik ist nicht eine Trennung von Belangen Problem und es wird in mehreren Orten, dann factoring es aus in der Allgemeinen Komponenten, die würden wahrscheinlich Ihre beste Wette.
Schießen aus der Hüfte, das klingt wie eine kleine Anwendung, die davon profitieren könnten, Abhängigkeit der Lösung ein controller in der unmittelbaren Zukunft. Die Anwendung wächst (oder wenn es bereits geplant ist, zu groß) dann die Trennung der Logik in eine ordentliche SOA-format von Vorteil wäre.
tl;dr - SO wirklich kann diese Frage nicht beantworten, ohne zu wissen, was die Anwendung und tun. Pragmatisch sein.