在 Windows 应用程序中处理 JSONP 响应
Posted
技术标签:
【中文标题】在 Windows 应用程序中处理 JSONP 响应【英文标题】:Handling JSONP response in windows application 【发布时间】:2017-08-21 10:01:23 【问题描述】:我有一个已设置为返回 JSONP 的 ASP.NET Web API 2 项目 (使用来自 GitHub (https://github.com/WebApiContrib) 的 ASP.NET Web API Contrib repo),现在当通过 jQuery 使用 API 时,我的 Web 应用程序中的一切看起来都很好。
但是,还有一个 windows 应用程序需要访问相同的数据,但我对如何在 c# 类中处理响应感到很茫然。
我有这段代码,当 API 返回纯 JSON 时,它运行良好(使用 JSON.NET):
public List<DropItem> GetAvailableDomains()
string jsonData = null;
using (WebClient wc = new WebClient())
jsonData = wc.DownloadString("http://foo.bar/api/core/getavailabledomains");
return JsonConvert.DeserializeObject<List<DropItem>>(jsonData);
但是,使用 JSONP,由于响应中带有回调函数等的开销,它根本无法识别响应数据。
有没有好办法处理这个问题?
【问题讨论】:
好方法:让您的 API 有选择地返回 JSON 或 JSONP(根据 GET 参数或标头)。不好的方式:jsonData = jsonData.Replace("callback(", ""); jsonData = jsonData.Substring(0, jsonData.Length - 1);
之类的东西(请不要)
我也在考虑拥有它,我刚开始使用 WebAPI,使用 WCF 我脑子里已经有了这一切,但在这里我只是不知道如何将它放在适当的位置,以便API 将返回纯 JSON 或 JSONP。 :P 我已经用谷歌搜索并试图阅读如何实现它,但最终一无所获。
【参考方案1】:
这成功了
public static void RegisterFormatters(MediaTypeFormatterCollection formatters)
var jsonp = new JsonpMediaTypeFormatter(formatters.JsonFormatter);
jsonp.MediaTypeMappings.Add(new QueryStringMapping("type", "jsonp", "application/json"));
GlobalConfiguration.Configuration.Formatters.Add(jsonp);
GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new QueryStringMapping("type", "json", "application/json"));
【讨论】:
您能否稍微扩展一下这个答案 - 看起来这是服务器端更改而不是客户端更改(因此实际上可能会回答不同的问题)。可能编辑问题会是更好的选择。所问的问题将与***.com/questions/48470971/… 重复,但根据答案,它是关于不同的东西。以上是关于在 Windows 应用程序中处理 JSONP 响应的主要内容,如果未能解决你的问题,请参考以下文章
带有 AngularJS 的 Windows Phone 8.1 上的 Phonegap 无法从我的 API 中检索 JSONP