如何禁用内容协商并始终从WCF数据服务返回JSON?

时间:2011-11-02 09:53:12

标签: json wcf-data-services atom-feed content-negotiation

假设我有一个northwind数据库,我使用ADO.NET实体数据模型,我自动从数据库中的表生成。然后我添加一个从DataService继承的新WCF数据服务。当我启动运行服务的Web应用程序时,我可以请求这样的数据: http://machine/Northwind.svc/Orders

这将以atom / xml格式返回订单表中的所有订单。问题是我不想要XML。我想要JSON。我想我在我的应用程序中尝试了各种设置(web.config)和属性,但我仍然使用XML。无论。当我使用fiddler并更改请求标头以接受JSON时,我只能获得JSON。

我不喜欢内容协商的概念。我希望始终以JSON格式返回数据。我怎样才能做到这一点?

请记住,我没有创建任何模型对象,它们是根据数据库表和关系自动创建的。

2 个答案:

答案 0 :(得分:2)

内容良好的协商来自HTTP。在任何情况下,您都可以拦截传入的请求并添加/覆盖Accept标头以始终指定JSON。有一个示例如何支持使用类似技巧的JSONP,我认为你应该能够修改它以便总是返回JSON。 http://archive.msdn.microsoft.com/DataServicesJSONP

答案 1 :(得分:1)

您批评的行为由specification of OData protocol定义。 OData默认为Atom,客户端可以通过Accept HTTP标头或查询字符串中的$format参数来控制表示的媒体类型(但我不确定WCF数据服务是否已经支持此功能)。