无法让 JSONP 与 WCF 数据服务一起使用

Posted

技术标签:

【中文标题】无法让 JSONP 与 WCF 数据服务一起使用【英文标题】:Can't get the JSONP working with WCF Data Services 【发布时间】:2011-02-28 07:28:26 【问题描述】:

从我阅读和观看的所有内容看来,从 WCF 数据服务公开 JSON 应该像将 JSONPSupportBehavior 属性添加到服务类一样简单。

问题是VS2010 无法识别JSONPSupportBehavior 属性。

有没有我遗漏的参考资料?似乎从所有文章中,它都得到了开箱即用的支持。

【问题讨论】:

我不认为它默认包含在内。有关示例代码,请参阅此link。 下载代码here。这个真的有效! 【参考方案1】:

WCF 数据服务支持开箱即用的 JSON,无需添加属性或任何东西。

为了接收 JSON 格式的响应,客户端使用标准 HTTP 内容类型协商。

具体来说,他们需要在请求的accept 标头中包含application/json

OData protocol documentation的这一部分有例子。

这些示例显示了原始 HTTP 请求。不同的客户端 HTTP API 有不同的机制来指定请求头。

JSONPSupportBehavior 属性是一个扩展示例,它允许客户端在内容类型协商之外使用 URL 查询字符串选项(即 $format=json),并且还添加了对“JSONP”的支持(即 @987654327 @)。

这些在您不控制标头的情况下很有用,例如通过脚本标签进行跨域访问时。

如果你想使用JSONPSupportBehavior,你可以在这里获取:

http://code.msdn.microsoft.com/DataServicesJSONP

【讨论】:

是的,我去过您提供的链接,但错过了其中包含类文件的下载链接。谢谢【参考方案2】:

较新版本的 WCF 数据服务默认支持 JSON,您必须拥有

Accept: application/json;odata=verbose

在请求头中。

Accept: application/json

已经不够用了。更多信息here。

【讨论】:

【参考方案3】:

WCF 不仅支持开箱即用的 JSON,而且如果您使用 WCF WebApi(预览版 6),它还支持开箱即用的 JSONP。使用 NuGet 进入 VS 2010。安装后,请查看here 了解更多信息。

【讨论】:

以上是关于无法让 JSONP 与 WCF 数据服务一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Jquery 无法从 WCF REST 服务获得响应

WCF:使用 JSONP 将来源列入白名单

调用 WCF 服务时 JSONP 自动完成失败

通过 SSL 使用 JSONP 的 WCF 服务

POX 从 WCF 数据服务返回数据

WCF 数据服务 (OData) 和 CORS