API Web Asp.Net MVC4: restituisce Json formattato OData dalla query senza MediaTypeFormatter personalizzato

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

Domanda

Sto cercando di utilizzare la nuova WebAPI beta per creare un servizio web che posso interrogare utilizzando le convenzioni della stringa di query OData e fare in modo che restituisca OData formattato Json . Voglio anche usare OData 2.0 (invece di 1.0).

Anche se non sembra che abbia il supporto per $ select e le intestazioni sembrano essere in grado di sovrascrivere l'opzione $ format , la restituzione di un IQueryable generico sembra fornire supporto per la maggior parte delle altre opzioni di query di cui ho bisogno.

Quello con cui sto veramente lottando è il modo migliore per fornire oggetti Json che soddisfano le specifiche OData 2.0. WebAPI restituisce solo i normali dati Json quando interrogati. Ad esempio, se eseguo una richiesta GET di qualcosa di simile ...

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

..per ottenere il miglior hit corrispondente al numero RON specificato sulla mia macchina di sviluppo, ottengo una risposta contenente il seguente Json ...

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

Ho bisogno di Json che soddisfi le specifiche OData 2.0. Qualcosa di più simile a questo ..

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

Suppongo di poter scrivere un MediaTypeFormatter personalizzato per ottenere la struttura che desidero. Potrei anche essere in grado di modificare i miei oggetti restituiti per imitare la struttura del Json desiderato. A parte queste due opzioni, qualcuno conosce un modo intelligente per fare in modo che WebAPI mi fornisca oggetti Json formattati OData 2.0?

È stato utile?

Soluzione

Devi scrivere il tuo MediaTypeFormatter per fornire la corretta serializzazione.Non abbiamo fornito un formattatore OData in MVC 4 Beta, ma la precedente incarnazione di WCF Web Api ha alcuni esempi di come scriverne uno. http://wcf.codeplex.com/SourceControl/list/changesets Cerca Microsoft.Net.Http.Formatting.OData (dovresti essere in grado di utilizzare la maggior parte dei sorgenti, anche se alcuni dettagli di implementazione potrebbero essere cambiati)

Un'alternativa potrebbe essere quella di provare a costruire un DTO che serializzi la forma prevista da OData v2.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top