ASP.NET MVC4 API Web - Renvoie un JSON formaté ODATA à partir de la requête sans MédiaTypeFormatter personnalisé

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

Question

J'essaye d'utiliser le nouveau Webapi Beta pour créer un service Web que je peux interroger Conventions à cordes de requête OData Et le rendre retour Odata a formaté JSON. Je veux également utiliser ODATA 2.0 (au lieu de 1.0).

Bien qu'il ne semble pas avoir un soutien pour le $ SELECT L'option et les en-têtes semblent être en mesure de remplacer le $ format option, renvoyer un IQueryable Generic semble fournir un support pour la plupart des autres options de requête dont j'ai besoin.

Ce avec quoi je suis vraiment aux prises avec la meilleure façon de fournir des objets JSON qui répondent à la spécification Odata 2.0. WebAPI renvoie simplement les données JSON normales lorsqu'elles sont interrogées. Par exemple, si j'effectue une demande de remise de quelque chose comme ça ...

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

..pour obtenir le succès supérieur correspondant au Ronumber spécifié sur ma machine de développement, je reçois une réponse contenant le JSON suivant ...

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

J'ai besoin de JSON qui répond à la spécification ODATA 2.0. Quelque chose de plus comme ça.

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"
    }
  }
}

Je suppose que je pourrais écrire une coutume MediaTypeFormatter pour obtenir la structure que je veux. Je pourrais également être en mesure de modifier mes objets retournés pour imiter la structure du JSON souhaité. Mis à part ces deux options, quelqu'un connaît-il une façon intelligente de faire en sorte que WebAPI me donne des objets JSON formatés Odata 2.0?

Était-ce utile?

La solution

Vous devez écrire le vôtre MediaTypeFormatter pour fournir la bonne sérialisation. Nous n'avons pas expédié un formateur ODATA dans le MVC 4 Beta, mais l'incarnation précédente de l'API Web WCF a quelques exemples de la façon d'écrire un. http://wcf.codeplex.com/sourcecontrol/list/changesets Recherchez Microsoft.net.http.formatting.odata (vous devriez pouvoir utiliser la plupart de la source, bien que certains détails d'implémentation aient pu changer)

Une alternative serait d'essayer de construire un DTO qui allait sérialiser à la forme attendue par Odata V2.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top