Asp.Net MVC4-Web-API - Gibt OData-formatiertes Json aus einer Abfrage ohne benutzerdefinierten MediaTypeFormatter zurück

StackOverflow https://stackoverflow.com/questions/9389762

Frage

Ich versuche, mithilfe der neuen WebAPI Beta einen Webdienst zu erstellen, den ich abfragen kann Verwenden Sie die OData-Abfragezeichenfolgenkonventionen und lassen Sie sie OData-formatiertes Json . Ich möchte auch OData 2.0 (anstelle von 1.0) verwenden.

Es sieht zwar nicht so aus, als hätte es Unterstützung für $ select Option und Header scheinen in der Lage zu sein, die Option $ format zu überschreiben Die Rückgabe eines generischen generischen Codecodes scheint Unterstützung für die meisten anderen Abfrageoptionen zu bieten, die ich benötige.

Ich habe wirklich Probleme damit, wie ich Json-Objekte am besten bereitstellen kann, die der OData 2.0-Spezifikation entsprechen. WebAPI gibt bei der Abfrage nur normale Json-Daten zurück. Zum Beispiel, wenn ich eine GET-Anfrage für so etwas durchführe ...

http://localhost:XXXXX/vendor/?$filter=RONUMBER eq '2597385'&$select=VENDORID,VENDORNAME&$top=1&$format=Json

..Um den Top-Treffer zu erhalten, der mit der angegebenen RONumber auf meinem Entwicklungscomputer übereinstimmt, erhalte ich eine Antwort mit dem folgenden Json ...

[{"MEPartNumber":"11-2222-3-4444","MFGPartNumber":"123456-123","MFGSerialNumber":"ABC123","RONumber":"987654321","VendorId":"1234567","VendorName":"ACME SERVICE CENTER"}]

Ich benötige Json, das die OData 2.0-Spezifikation erfüllt. Etwas ähnlicheres ..

OData V2: { 
  "d" : { 
    "results":  { 
        "__metadata": {
            "uri": "http://someserver/foo/vendor(1)",
            "type": "Vendor"
        },
        "MEPartNumber": "11-2222-3-4444",
        "MFGPartNumber": "123456-123",
        "MFGSerialNumber": "ABC123", 
        "RONumber":"987654321", 
        "VendorId":"1234567", 
        "VendorName": "ACME SERVICE CENTER"
    }
  }
}

Ich nehme an, ich könnte einen benutzerdefinierten IQueryable schreiben, um die gewünschte Struktur zu erhalten. Möglicherweise kann ich auch meine zurückgegebenen Objekte ändern, um die Struktur des gewünschten Json nachzuahmen. Kennt jemand, abgesehen von diesen beiden Optionen, eine clevere Möglichkeit, WebAPI dazu zu bringen, mir OData 2.0-formatierte Json-Objekte zu geben?

War es hilfreich?

Lösung

Sie müssen Ihren eigenen MediaTypeFormatter schreiben, um die richtige Serialisierung bereitzustellen.Wir haben in der MVC 4 Beta keinen OData-Formatierer ausgeliefert, aber die vorherige Inkarnation von WCF Web Api enthält einige Beispiele für das Schreiben eines. http://wcf.codeplex.com/SourceControl/list/changesets Suchen Sie nach Microsoft.Net.Http.Formatting.OData (Sie sollten in der Lage sein, den größten Teil der Quelle zu verwenden, obwohl sich einige Implementierungsdetails möglicherweise geändert haben)

Eine Alternative wäre, zu versuchen, ein DTO zu erstellen, das in die von OData v2 erwartete Form serialisiert wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top