Asp.Net MVC4-Web-API - Geben Sie OData-formatiertes Json aus der Abfrage ohne benutzerdefiniertes MediaTypeFormatter zurück

9

Ich versuche, die neue WebAPI Beta zu verwenden, um einen Webdienst zu erstellen, den ich mit OData Query String-Konventionen und lassen Sie es zurückgeben OData formatiert Json . Ich möchte auch OData 2.0 (statt 1.0) verwenden.

Es sieht zwar nicht so aus, als hätte es Unterstützung für die $ Auswahl Option und die Header scheinen in der Lage zu sein, die $ format -Option außer Kraft zu setzen, die ein IQueryable generic zurückliefert Unterstützung für die meisten anderen Abfrageoptionen, die ich brauche.

Woran ich wirklich schlage, ist, wie man am besten Json-Objekte bereitstellt, die die OData 2.0-Spezifikation erfüllen. WebAPI gibt nur normale Json-Daten zurück, wenn sie abgefragt werden. Zum Beispiel, wenn ich eine GET-Anfrage von so etwas ...

mache %Vor%

.. um den besten Treffer zu erhalten, der mit der angegebenen RONumber auf meinem Dev-Rechner übereinstimmt, erhalte ich eine Antwort mit folgendem Json ...

%Vor%

Ich brauche Json, das die Spezifikation OData 2.0 erfüllt. Etwas mehr so ​​..

%Vor%

Ich könnte einen benutzerdefinierten MediaTypeFormatter schreiben, um die gewünschte Struktur zu erhalten. Ich könnte auch meine zurückgegebenen Objekte ändern, um die Struktur des gewünschten Json nachzuahmen. Abgesehen von diesen beiden Möglichkeiten, weiß jemand eine clevere Möglichkeit, WebAPI geben Sie mir OData 2.0 formatierte Json-Objekte?

    
racingcow 22.02.2012, 05:53
quelle

1 Antwort

5

Sie müssen Ihre eigene MediaTypeFormatter schreiben, um die richtige Serialisierung bereitzustellen. Wir haben keinen OData-Formatierer in der MVC 4 Beta ausgeliefert, aber die vorherige Version von WCF Web Api hat einige Beispiele, wie man einen schreibt. Ссылка Suchen Sie nach Microsoft.Net.Http.Formatting.OData (Sie sollten den Großteil der Quelle verwenden können, obwohl einige Implementierungsdetails sich möglicherweise geändert haben)

Eine Alternative wäre, zu versuchen, ein DTO zu erstellen, das zu der von OData v2 erwarteten Form serialisieren würde.

    
marcind 22.02.2012, 20:20
quelle