Как отключить согласование содержимого и всегда возвращать JSON из службы данных WCF?

#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 в версии, которую я использую, не поддерживают формат $. Мне не нравится это поведение по умолчанию, но мне придется научиться жить с этим. Спасибо за ваш вклад.