我有一个非常简单的基于反射的 OData 示例,当我按照指示使用 Accept 标头时,运行良好并生成 json。但是,我无法让它与 $format=json 参数一起使用。每当我添加该参数时,我都会收到错误请求。据此,它似乎应该工作:链接文本
请注意,其他系统查询选项(例如 $select)可以正常工作。这是通过 VS2010 运行的 .Net 4。
$format=json
即使 OData 规范表示支持,对 .NET 4 WCF 数据服务使用开箱即用也不会起作用。我不确定微软为什么不直接支持它。但是对于这种情况有两种解决方法 - 一种感觉有点笨拙,另一种是有道理的。
首先,感觉有点笨拙的解决方案是构建一个 HttpHandler 来拦截您的请求,读取$format=json
查询字符串参数,然后向您的请求添加一个接受标头(同时删除有问题的$format=json
参数)。此博客文章对此进行了描述。
第二种解决方案,听起来好一点,就是用一个[JSONPSupportBehavior]
属性来装饰你的数据服务。这更有意义并且更容易实现(因为您不必构建 HttpHandler)。以下是一些有用的链接:
我喜欢属性方法,我只是希望它不是从 CodePlex 下载的……它只是听起来还不支持。但那只是我的个人意见。
老实说,如果您有控制权,最好的方法就是在您的请求中添加一个接受标头,application/json
您的服务将自动返回 JSON 格式的结果。
我希望这有帮助。
遇到此问题的任何人...您现在可以使用WCF 数据服务工具包并从 ODataService 而不是 DataService 继承来自动启用此功能。