Asp.Net MVC4 Web API - Возврат OData форматированного Json из запроса без пользовательского MediaTypeFormatter

Я пытаюсь использовать новый WebAPI beta для создания веб-службы, которую я могу запросить, используя OData query string conventions, и чтобы она возвращала OData formatted Json. Я также хочу использовать OData 2.0 (вместо 1.0).

Хотя не похоже, что он поддерживает опцию $select, а заголовки, похоже, могут переопределять опцию $format, возвращение IQueryable generic, похоже, обеспечивает поддержку большинства других опций запроса, которые мне нужны.

Что меня действительно беспокоит, так это то, как лучше предоставить Json-объекты, соответствующие спецификации OData 2.0. WebAPI просто возвращает обычные данные Json при запросе. Например, если я выполню GET-запрос примерно такого вида...

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

...чтобы получить верхний хит, соответствующий указанному RONumber на моей машине разработчика, я получу ответ, содержащий следующий Json...

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

Мне нужен Json, который соответствует спецификации OData 2.0. Что-то вроде этого...

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

Полагаю, я мог бы написать пользовательский MediaTypeFormatter, чтобы получить нужную мне структуру. Я также мог бы изменить мои возвращаемые объекты, чтобы имитировать структуру желаемого Json. Помимо этих двух вариантов, знает ли кто-нибудь умный способ заставить WebAPI отдавать мне объекты Json в формате OData 2.0?

9
задан SliverNinja - MSFT 22 February 2012 в 04:21
поделиться