#json #wcf-data-services #atom-feed #content-negotiation
#json #wcf-data-services #atom-feed #согласование содержимого
Вопрос:
Допустим, у меня есть база данных northwind, и я использую ADO.NET Модель данных сущности, которую я автоматически генерирую из таблиц в базе данных. Затем я добавляю новую службу данных WCF, которая наследуется от DataService. Когда я запускаю веб-приложение, которое запускает службу, я могу запросить данные следующим образом: http://machine/Northwind.svc/Orders
Это вернет все заказы из таблицы заказов в формате atom / xml. Проблема в том, что я не хочу XML. Я хочу JSON. Я думаю, что я перепробовал все виды настроек (web.config) и атрибутов в своем приложении, но я все равно получаю XML. Несмотря ни на что. Я могу получить JSON только тогда, когда использую fiddler и изменяю заголовок запроса на принятие JSON.
Мне не нравится концепция согласования содержимого. Я хочу всегда возвращать данные в формате JSON. Как я могу этого добиться?
Имейте в виду, что я не создавал никаких объектов модели, они автоматически создаются на основе таблиц базы данных и связей.
Ответ №1:
Хорошо — согласование содержимого поставляется с HTTP. В любом случае вы можете перехватить входящий запрос и добавить / перезаписать заголовок Accept, чтобы всегда указывать JSON. Есть пример поддержки JSONP, в котором используется аналогичный трюк, я думаю, вы должны иметь возможность изменить его, чтобы всегда возвращать JSON. http://archive.msdn.microsoft.com/DataServicesJSONP .
Ответ №2:
Поведение, которое вы критикуете, определяется спецификацией протокола OData. По умолчанию в OData используется значение Atom, и клиент может управлять типом носителя представления либо с помощью заголовка Accept HTTP, либо с помощью $format
параметра в строке запроса (но я не уверен, что службы передачи данных WCF уже поддерживают это).
Комментарии:
1. Службы данных WCF в версии, которую я использую, не поддерживают формат $. Мне не нравится это поведение по умолчанию, но мне придется научиться жить с этим. Спасибо за ваш вклад.