Kann mir jemand erklären, wann ich mein Controller-Formular ODataController
vs ApiController
erben sollte?ApiController vs ODataController beim Aussetzen von DTOs
Die Frage wird durch die Tatsache verursacht, dass die von ApiController
zurückgegebenen Ergebnisse mit OData-Abfrage gefiltert werden können.
Wenn ich QueraybleAttribute
auf die Methoden von contoller anwenden, wird die Abfrage verarbeitet, selbst wenn die Aktion IEnumerable
zurückgibt.
Ohne dieses Attribut, aber mit dem Aufruf config.EnableQuerySupport()
, wird die Abfrage nur verarbeitet, wenn die Methode IQueryable
zurückgibt.
Ich denke, es ist kein konsistentes Verhalten. WebAPI documentation and examples bedeutet, dass der Controller von ODataController inerit sein muss. Und ich bin ein wenig verwirrt.
Entweder ApiController
accidentally
und teilweise unterstützt Teil (mindestens $ überspringen, $ Filter und $ oben) von OData-Protokoll. Oder das ist von Entwurf und ich brauche ODataController für komplette ODataSupport.
Das eigentliche Problem ist, dass mein Dienst DTOs, nicht POCOs exponiert. Es kann keine Eins-zu-Eins-Zuordnung geben. Es muss eine OData-Abfrage für DTOs in eine EF-Abfrage für POCOs konvertiert werden.
Jetzt nur mit OData spielen. Ich rufe Entitäten ab und wandle sie in DTOs um. Zugegebenermaßen ist dies nicht sehr performant, um alle von DB für jede Anfrage zu erhalten, die für Experimente noch tolerierbar ist. Aber es ist definitiv nicht notwendig, alle Entitäten an den Client zurückzugeben, wenn es eine gefilterte Teilmenge von DTOs erfordert.
Die OData-Abfrage wurde sofort mit ApiController und dem Attribut Queryble gestartet, aber die oben erwähnte Inkonsistenz lässt mich etwas falsch machen.
Ich denke, es ist, weil es zusätzliche Funktionen wie Metadaten implementiert ermöglicht WCF Data Services-Client verwendet werden: http://sravi-kiran.blogspot.co.nz/2013/ 08/ConsumingWebApiODataFromNetAndJavaScriptClientApplications.html, http://blogs.msdn.com/b/webdev/archive/2013/01/29/getting-started-with-asp-net-webapi-odata-in-3-simple-steps.aspx, http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api. Web-API (mit Abfrage-Unterstützung) kam Januar 2012 und Web-API-OData im Januar 2013, so dass ich denke, Sie haben Recht mit "Ich brauche ODataController für vollständige ODataSupport" OData-Spezifikation entsprechen. – Michael