4

我有一个非常简单的基于反射的 OData 示例,当我按照指示使用 Accept 标头时,运行良好并生成 json。但是,我无法让它与 $format=json 参数一起使用。每当我添加该参数时,我都会收到错误请求。据此,它似乎应该工作:链接文本

请注意,其他系统查询选项(例如 $select)可以正常工作。这是通过 VS2010 运行的 .Net 4。

4

2 回答 2

4

$format=json即使 OData 规范表示支持,对 .NET 4 WCF 数据服务使用开箱即用也不会起作用。我不确定微软为什么不直接支持它。但是对于这种情况有两种解决方法 - 一种感觉有点笨拙,另一种是有道理的。

首先,感觉有点笨拙的解决方案是构建一个 HttpHandler 来拦截您的请求,读取$format=json查询字符串参数,然后向您的请求添加一个接受标头(同时删除有问题的$format=json参数)。此博客文章对此进行了描述。

第二种解决方案,听起来好一点,就是用一个[JSONPSupportBehavior]属性来装饰你的数据服务。这更有意义并且更容易实现(因为您不必构建 HttpHandler)。以下是一些有用的链接:

  • 描述如何使用它的博客文章。
  • 链接以下载[JSONPSupportBehavior] 属性的源代码(是的,您必须构建它——我还没有找到已编译的下载)。

我喜欢属性方法,我只是希望它不是从 CodePlex 下载的……它只是听起来还不支持。但那只是我的个人意见。

老实说,如果您有控制权,最好的方法就是在您的请求中添加一个接受标头,application/json您的服务将自动返回 JSON 格式的结果。

我希望这有帮助。

于 2010-08-31T02:00:14.823 回答
0

遇到此问题的任何人...您现在可以使用WCF 数据服务工具包并从 ODataService 而不是 DataService 继承来自动启用此功能。

于 2013-04-23T02:47:20.317 回答