Опция системного запроса OData $ format вызывает неверный запрос 400 - PullRequest
4 голосов
/ 31 августа 2010

У меня есть очень простой пример OData на основе Reflection, который работает нормально и генерирует json, когда я использую заголовок Accept, как указано.Однако я не могу заставить его работать с параметром $ format = json.Всякий раз, когда я добавляю этот параметр, я получаю Bad Request.В соответствии с этим кажется, что это должно работать: текст ссылки

Обратите внимание, что другие параметры системного запроса, такие как $ select, работают нормально.Это .Net 4, работающий через VS2010.

Ответы [ 2 ]

4 голосов
/ 31 августа 2010

Использование $format=json из коробки для службы данных .NET 4 WCF не будет работать, даже если спецификация OData говорит, что она поддерживается. Я не уверен, почему Microsoft не поддерживает это напрямую. Но есть два обходных пути в этой ситуации - один чувствует себя немного хакером, а другой имеет какой-то смысл.

Во-первых, решение, которое кажется немного хакерским, состоит в том, чтобы создать HttpHandler, который перехватывает ваш запрос, читает параметр строки запроса $format=json, а затем добавляет заголовок accept к вашему запросу (удаляя ошибочный параметр $format=json). Это описано в этом блоге .

Второе решение, которое звучит немного лучше, - это украсить вашу службу данных атрибутом [JSONPSupportBehavior]. Это имеет немного больше смысла и немного проще в реализации (так как вам не нужно создавать HttpHandler). Вот несколько полезных ссылок:

Мне нравится атрибутивный подход, я просто хочу, чтобы это не было загрузкой с CodePlex ... просто пока не поддерживается. Но это только мое мнение.

Честно говоря, если у вас есть контроль, лучший способ - просто добавить заголовок accept к вашему запросу application/json, и ваш сервис автоматически вернет результаты в формате JSON.

Надеюсь, это поможет.

0 голосов
/ 23 апреля 2013

Любой, кто сталкивался с этим ... Теперь вы можете использовать WCF Data Services Toolkit и наследовать от ODataService, а не DataService для автоматического включения этой функции.

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