API Web Asp.Net MVC4 - Retorna OData formatado Json da consulta sem MediaTypeFormatter personalizado

9

Estou tentando usar o novo WebAPI beta para criar um serviço da Web que possa consultar usando a Convenções de cadeia de consulta OData e faça com que ele retorne OData formatado para OData . Eu também quero usar o OData 2.0 (em vez de 1.0).

Embora não pareça ter suporte para a opção e os cabeçalhos $ select parece ser capaz de substituir a opção $ format , retornando um IQueryable genérico parece fornecer suporte para a maioria das outras opções de consulta que eu preciso.

O que estou realmente lutando é como melhor fornecer objetos Json que atendam à especificação OData 2.0. O WebAPI apenas retorna dados normais do Json quando consultados. Por exemplo, se eu executar uma solicitação GET de algo assim ...

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

.. para obter o maior hit correspondente ao RONumber especificado na minha máquina dev, recebo uma resposta contendo o seguinte Json ...

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

Eu preciso do Json que atenda às especificações do OData 2.0. Algo mais parecido com isso ..

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

Suponho que eu poderia escrever um MediaTypeFormatter personalizado para obter a estrutura que desejo. Eu também poderia modificar meus objetos retornados para imitar a estrutura do Json desejado. Além dessas duas opções, alguém sabe de uma maneira inteligente de fazer o WebAPI me fornecer objetos Json formatados com OData 2.0?

    
por racingcow 22.02.2012 в 06:53
fonte

1 resposta

5

Você precisa escrever seu próprio MediaTypeFormatter para fornecer a serialização correta. Nós não enviamos um formatador OData no MVC 4 Beta, mas a encarnação anterior do WCF Web Api tem alguns exemplos de como escrever um. link Procure por Microsoft.Net.Http.Formatting.OData (você deve ser capaz de usar a maior parte da fonte, embora alguns detalhes de implementação possam ter mudado)

Uma alternativa seria tentar construir um DTO que seria serializado para a forma esperada pelo OData v2.

    
por marcind 22.02.2012 / 21:20
fonte