Может легко работать с документом метаданных WebAPI Odata в формате atom/xml.

Я пытаюсь собрать POC прямо сейчас, чтобы легко вызвать службу Odata веб-API. Может ли ветер работать с форматом Atom/xml документа метаданных, который обслуживается по умолчанию, или он должен быть только в формате json.

Я проверил исходный код веб-API, в частности ODataMediaTypeFomatters, и определил, что ODataPayloadKind метаданных не является частью JsonMediaTypeFormatter.

Я пытался работать с форматом atom/xml, но клиент бриза не справляется с этим вызовом.

Заранее спасибо, Теджа


person Teja    schedule 04.03.2014    source источник


Ответы (2)


Нам нужно отличать формат метаданных от формата данных. Насколько мне известно, метаданные OData всегда возвращаются в виде XML. Сейчас нет и никогда не было формата JSON для метаданных. И Breeze всегда использовал XML-представление метаданных, поступающих из источников OData (насколько я помню, эта задача была передана библиотеке dataJS).

OData поддерживает множество форматов для запроса и сохранения данных, хотя все чаще JSON оказывается единственным, который имеет значение.

Я предполагаю, что проблема, с которой вы столкнулись, заключается в том, что OData веб-API не возвращает полные метаданные, которые требуются Breeze. Его основной недостаток заключается в том, что в нем отсутствует определение свойств внешнего ключа, которые поддерживают ассоциации. Microsoft знает об этом и обещает исправить в будущем.

Тем временем член команды OData предложил простой обходной путь, и мы поместили его в пакет nuget, чтобы сделать его еще проще.

Это описано в нашем примере OData веб-API. Этот пример включен в полную загрузку Breeze, доступную на странице загрузки Breeze.

Наконец, вопрос к вам. Почему вы решили написать свое приложение с OData веб-API, а не с обычным веб-API? Я не осуждаю. Мне любопытно. Мы хотим понять сравнительную ценность этих тесно связанных альтернатив. Спасибо.

person Ward    schedule 04.03.2014
comment
Я выбираю OData, поскольку у нас уже есть приложение SL, использующее службу OData. Мне нужно использовать удаленную конечную точку OData веб-API, смоделированную поверх EF codefirst DbContext. Поэтому я включил поддержку CORS для соответствующих контроллеров. однако, поскольку первый вызов, который делает ветерок, предназначен для вызова ODataMetadata и поскольку он внутренне обрабатывается ODataMetadataController, я не смог украсить его атрибутом Cors. поэтому я создал отдельный контроллер и связанное с ним соглашение, унаследовав ODataController, и украсил его CORS. Вызов опций проходит без полезной нагрузки метаданных. - person Teja; 05.03.2014
comment
Однако запрос на получение в скрипаче дает полезную нагрузку. поэтому могу ли я сгенерировать метаданные с помощью сценария, как указано в документах breeze, в файл js, обойти вызов метаданных и работать с конечной точкой OData для остальных вызовов? Не могли бы вы сообщить мне мои варианты в этом отношении и некоторые ресурсы, которые я могу проверить в этом сценарии. - person Teja; 05.03.2014
comment
Вам не нужно помещать атрибут cors в метод или контроллер. Вы можете установить его глобально для приложения. См. подробное рассмотрение Броком Алленом веб-API и CORS. Вам даже не нужно использовать атрибут. ВАЖНО: вы не можете использовать ODataConventionModelBuilder, потому что он создает неполные метаданные. См. описание EdmBuilder в нашем примере OData веб-API. - person Ward; 05.03.2014
comment
И да, вы можете сгенерировать метаданные любым доступным вам способом, записать их в файл скрипта и использовать ЭТО в качестве источника вместо того, чтобы запрашивать метаданные $ с сервера. Используйте Загрузить метаданные из скрипта для вдохновения. - person Ward; 05.03.2014
comment
Привет Уорд, спасибо за информацию. я пытаюсь поиграть с одним из этих примеров breezejs.com/samples/breeze- веб-api-данные . не могли бы вы сообщить мне, есть ли открытая конечная точка webapi odata, которая включена для того же, чтобы играть с удаленным сценарием в моей локальной среде. - person Teja; 05.03.2014
comment
когда я играю со службой, поддерживаемой webapi, запрос метаданных идет как Get, а ответ включает заголовки cors плюс полезную нагрузку. я тоже пробовал с jquery с конечной точкой webapi с поддержкой cors, и она отлично работает. но для вызова webapi odata запрос представляет собой запрос параметров http, а не получение, когда он сделан с ветерком. есть ли что-то, что мне нужно рассмотреть для настройки в конфигурации бриза для этого. - person Teja; 05.03.2014
comment
это сценарий удаленного вызова с использованием jquery на конечной точке webapi с поддержкой cors, о которой я говорю, которая работает нормально, делает запрос на получение и извлекает необходимые данные. jsfiddle.net/ramakrishnateja/QtQ5P/12 - person Teja; 05.03.2014
comment
Привет, Уорд, мне удалось изолировать образец, предоставленный скрипачу, без углов и представлений, и он работает нормально. я пытаюсь выяснить, где я ошибаюсь в своем коде, спасибо за ваше время и помощь в этом. вот скрипка, которую я выделил для OdatabreezeJSSample. я разместил его на своем локальном сервере. jsfiddle.net/ramakrishnateja/r3KmA - person Teja; 05.03.2014
comment
Привет Уорд, это может быть полезно для кого-то еще. Трюк, показанный в ссылке, не включает установку пространства имен EdmModel в пространство имен объектов, и по умолчанию edmmodel использует пространство имен DbContext, поэтому запросы через fiddler или linqpad не будет работа дает 406 - person Teja; 05.03.2014
comment
Привет, Уорд, в моем приложении я вижу, что при каждом вызове API есть вызов метаданных. Можем ли мы скопировать эти метаданные и использовать их при создании менеджера так же, как мы можем сделать это для метаданных json? Я пробовал это, но магазин ожидал формат json и не мог анализировать XML. Есть ли альтернатива вызову метаданных только один раз? - person Hemant; 06.08.2015

Сейчас ветер поддерживает только json.

Однако не стесняйтесь добавлять запрос на другие форматы в голос пользователя Breeze https://breezejs.uservoice.com/forums/173093-breeze-feature-suggestions. Мы серьезно относимся к этим предложениям.

Кроме того, взгляните на новый пример Breeze OData в ZIP-файле образца Breeze.

person Jay Traband    schedule 04.03.2014
comment
Можете ли вы направить меня к документации Breeze, в которой говорится следующее: Breeze поддерживает только формат JSON для метаданных OData. - person Nikhil_Katre; 25.09.2014