Веб-API MVC4 Asp.Net - возвращает JSON в формате OData из запроса без специального MediaTypeFormatter - PullRequest
9 голосов
/ 22 февраля 2012

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

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

Я действительно борюсь с тем, как лучше всего предоставить объекты 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 давать мне отформатированные в OData 2.0 объекты Json?

1 Ответ

5 голосов
/ 23 февраля 2012

Вам необходимо написать свой MediaTypeFormatter, чтобы обеспечить правильную сериализацию.Мы не поставляли форматер OData в MVC 4 Beta, но в предыдущем варианте WCF Web Api было несколько примеров того, как его написать.http://wcf.codeplex.com/SourceControl/list/changesets Найдите Microsoft.Net.Http.Formatting.OData (вы должны иметь возможность использовать большую часть исходного кода, хотя некоторые детали реализации могли измениться)

Альтернативой может быть попыткасоздать DTO, который будет сериализован в форму, ожидаемую OData v2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...