我有一个非常简单的基于反射的OData样本,运行正常并在我使用Accept标头时生成json。但是,我无法使用$ format = json参数。每当我添加该参数时,我都会收到Bad Request。据此,它似乎应该有效:link text
请注意,其他系统查询选项(如$ select)可以正常工作。这是通过VS2010运行的.Net 4。
答案 0 :(得分:4)
对于.NET 4 WCF数据服务开箱即用的$format=json
将无法正常工作,即使OData Spec表示支持它也是如此。我不确定微软为什么不直接支持它。但是这种情况有两种解决方法 - 一种感觉有点hacky,另一种则有一定意义。
首先,感觉有点hacky的解决方案是构建一个拦截您的请求的HttpHandler,读取$format=json
querystring参数,然后在您的请求中添加一个接受标头(同时删除有问题的$format=json
参数)。这在this blog post。
第二种解决方案听起来好一点,就是使用[JSONPSupportBehavior]
属性来装饰您的数据服务。这样做更有意义,并且更容易实现(因为您不必构建HttpHandler)。以下是一些有用的链接:
[JSONPSupportBehavior]
的源代码
属性(是的,你必须建立
它 - 我还没有找到编译
下载)。我喜欢属性方法,我只是希望它不是CodePlex的下载...它听起来不支持。但那只是我的意见。
老实说,如果您有控制权,最好的方法就是在application/json
的请求中添加一个接受标头,您的服务将自动返回JSON格式的结果。
我希望这会有所帮助。
答案 1 :(得分:0)
遇到此问题的任何人......您现在可以使用WCF Data Services Toolkit并继承ODataService而不是DataService来自动启用此功能。