2012-02-22 17 views
9

Próbuję użyć nowej wersji WebAPI do zbudowania usługi internetowej, którą mogę wykonać za pomocą OData query string conventions i zwrócić ją OData formatted Json. Chcę również użyć OData 2.0 (zamiast 1.0).Asp.Net MVC4 Web API - Zwróć Json sformatowany w formacie OData z zapytania bez niestandardowego MediaTypeFormatter

Choć nie wygląda to posiada wsparcie dla opcji $select nagłówki i wydają się być w stanie zastąpić opcję $format, zwrócenie IQueryable generycznych wydaje się zapewniać wsparcie dla większości innych opcji kwerendy, które muszę.

To, z czym naprawdę walczę, to jak najlepiej zapewnić obiekty Json, które spełniają specyfikację OData 2.0. WebAPI po prostu zwraca normalne dane Json po zapytaniu. Na przykład, jeśli wykonać żądanie GET z czymś takim ...

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

..to dostać górny pasujący określony RONumber na moim komputerze dev, otrzymuję odpowiedź zawierającą następujące JSON ...

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

Potrzebuję Json, który spełnia specyfikację OData 2.0. Coś więcej tak ..

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

Przypuszczam Mógłbym napisać niestandardowy MediaTypeFormatter aby uzyskać strukturę, że chcę. Mogę również zmodyfikować moje zwrócone obiekty, aby naśladować strukturę pożądanego Jsona. Oprócz tych dwóch opcji, czy ktoś wie o sprytny sposób, aby WebAPI dał mi obiekty Json sformatowane w OData 2.0?

Odpowiedz

5

Musisz napisać własną MediaTypeFormatter, aby zapewnić odpowiednią serializację. Nie wysłaliśmy formatera OData w MVC 4 Beta, ale poprzednie wcielenie WCF Web Api ma kilka przykładów na to, jak go napisać. http://wcf.codeplex.com/SourceControl/list/changesets Poszukaj Microsoft.Net.Http.Formatting.OData (powinieneś być w stanie korzystać z większości źródeł, choć niektóre szczegóły implementacji mogły ulec zmianie)

Alternatywą byłoby próba skonstruowania DTO, który byłby serializowany do kształtu oczekiwanego przez OData v2.

+0

OK. Dzięki za informację, marcind. – racingcow