如何使用 WebAPI 处理 JSONP



可能的重复项:
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?

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

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

  1. 添加输出 JSONP 的media formatter
  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

最新更新