4

可能重复:
带有 MVC 4 WebApi 的 JSONP

我的 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?

4

1 回答 1

4

从这个副本中大量窃取......

要完成您想要的,您需要三件事:

  1. 添加一个media formatter输出 JSONP的
  2. 注册媒体格式化程序(传统上通过 global.asx 完成)
  3. 确保客户端请求 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/javascripttext/javascript

于 2012-05-09T14:10:03.483 回答