可能的重复项:
JSONP with MVC 4 WebApi
我有一个用于我的 WebAPI 的 get 方法,如下所示:
private T Get<T>(string uri)
{
T result = default(T);
bool isSuccess = true;
client
.GetAsync(uri)
.ContinueWith(task =>
{
// EnsureStatus
isSuccess = task.Result.IsSuccessStatusCode;
task
.Result
.Content
.ReadAsAsync<T>()
.ContinueWith(t => result = t.Result)
.Wait();
})
.Wait();
return result;
}
结果以 JSON 格式生成,但我希望它用于 JSONP。
我读过ReadAsSync
只处理内置的媒体格式化程序。那么有没有办法改变它来处理 JsonP?
从这个副本中大量窃取....
要完成你想要的,你需要三件事:
- 添加输出 JSONP 的
media formatter
- 注册媒体格式化程序(传统上通过 global.asx 完成(
- 确保客户端请求 jsonP。
您可以窃取此JSONP媒体格式化程序。
然后,您需要注册媒体格式化程序。可以使用以下代码片段以编程方式执行此操作:
var config = GlobalConfiguration.Configuration;
config.Formatters.Insert(0, new JsonpMediaTypeFormatter());
由于您显然不使用global.asax,因此您需要确保以某种方式注册格式化程序。 您没有提供有关如何执行此操作的足够信息,但我怀疑明智放置的 IF 语句和指示注册的静态变量会让您到达那里。
我仍然不太清楚你正在使用什么类型的客户端,但如果它是jquery,像下面这样的东西会让你到达那里:
$.ajax({
url: 'http://myurl.com',
type: 'GET',
dataType: 'jsonp',
success: function (data) {
alert(data.MyProperty);
}
})
重要的部分是发送的accept
标头与闪亮的新 jsonp 格式化程序正在侦听的接受标头匹配。 在我看来,前两个选择是:application/javascript
或text/javascript
。