如何禁用内容协商并始终从 WCF 数据服务返回 JSON?
假设我有一个 Northwind 数据库,并且使用 ADO.NET 实体数据模型,该模型是从数据库中的表自动生成的。然后我添加一个继承自 DataService 的新 WCF 数据服务。当我启动运行服务的 Web 应用程序时,我可以请求如下数据: http://machine/Northwind.svc/Orders
这将返回atom/xml中订单表中的所有订单格式。问题是我不需要 XML。我想要 JSON。我想我在应用程序中尝试了各种设置 (web.config) 和属性,但我仍然得到 XML。无论。当我使用 fiddler 并更改请求标头以接受 JSON 时,我只能获取 JSON。
我不喜欢内容协商的概念。我希望始终以 JSON 格式返回数据。我怎样才能做到这一点?
请记住,我没有创建任何模型对象,它们是根据数据库表和关系自动创建的。
Let's say I have a northwind database and I use ADO.NET Entity Data Model which I automatically generate from the tables in database. Then I add a new WCF data service that inherits from DataService. When I start the web application, that runs the service I can request data like this:
http://machine/Northwind.svc/Orders
This will return all orders from order table in atom/xml format. The problem is I do not want XML. I want JSON. I think I tried all kinds of settings (web.config) and attributes in my application, but I still get XML. No matter what. I can only get JSON, when I use fiddler and change the request header to accept JSON.
I do not like the concept of content negotiation. I want always to return data in JSON format. How can I achieve that?
Keep in mind that I did not create any model objects, they are automatically created based on database tables and relationships.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
嗯 - 内容协商是随 HTTP 一起提供的。在任何情况下,您都可以拦截传入请求并添加/覆盖 Accept 标头以始终指定 JSON。有一个如何支持 JSONP 的示例,它使用类似的技巧,我认为您应该能够修改它以始终返回 JSON。 http://archive.msdn.microsoft.com/DataServicesJSONP。
Well - content negotiation comes with HTTP. In any case, you could intercept the incoming request and add/overwrite the Accept header to always specify the JSON. There's a sample how to support JSONP which uses a similar trick, I think you should be able to modify it to always return JSON as well. http://archive.msdn.microsoft.com/DataServicesJSONP.
您批评的行为是由OData 协议规范定义的。 OData 默认为 Atom,客户端可以通过 Accept HTTP 标头或查询字符串中的 $format 参数来控制表示的媒体类型(但我不确定 WCF 数据服务是否已支持此功能)。
The behavior you criticize is defined by specification of OData protocol. OData defaults to Atom and client can control media type of the representation either by Accept HTTP header or by
$format
parameter in query string (but I'm not sure if WCF Data services already support this).