如何使用WebAPI处理JSONP?

时间:2012-05-09 10:13:10

标签: jsonp asp.net-web-api wcf-web-api

  

可能重复:
  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 个答案:

答案 0 :(得分:4)

this duplicate ....中自由地偷窃。

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

  1. 添加输出JSONP的media formatter
  2. 注册媒体格式化程序(传统上通过global.asx完成)
  3. 确保客户端请求jsonP。
  4. 您可以窃取此JSONP媒体formatter

    然后,您需要注册媒体格式化程序。您可以使用以下代码段以编程方式执行此操作:

    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