OData $格式系统查询选项导致错误请求400

时间:2010-08-30 20:59:40

标签: wcf json odata

我有一个非常简单的基于反射的OData样本,运行正常并在我使用Accept标头时生成json。但是,我无法使用$ format = json参数。每当我添加该参数时,我都会收到Bad Request。据此,它似乎应该有效:link text

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

2 个答案:

答案 0 :(得分:4)

对于.NET 4 WCF数据服务开箱即用的$format=json将无法正常工作,即使OData Spec表示支持它也是如此。我不确定微软为什么不直接支持它。但是这种情况有两种解决方法 - 一种感觉有点hacky,另一种则有一定意义。

首先,感觉有点hacky的解决方案是构建一个拦截您的请求的HttpHandler,读取$format=json querystring参数,然后在您的请求中添加一个接受标头(同时删除有问题的$format=json参数)。这在this blog post

中有所描述

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

  • Blog post描述了如何使用 它。
  • Link to download [JSONPSupportBehavior]的源代码 属性(是的,你必须建立 它 - 我还没有找到编译 下载)。

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

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

我希望这会有所帮助。

答案 1 :(得分:0)

遇到此问题的任何人......您现在可以使用WCF Data Services Toolkit并继承ODataService而不是DataService来自动启用此功能。