1

在我的 Web Api 项目中,我有一个 Get 方法,它从我的数据源返回数据:

    [WebGet(UriTemplate = "")]
    public IQueryable<Product> Get()
    {
        var products = _db.Products;
        return products.AsQueryable();
    }

当我使用测试客户端在浏览器中查看它时,当我指定以 JSON 格式返回时,它工作正常并返回 JSON。

在我的另一个客户端上,由于我的 API 托管在同一个域上(仅用于开发),我必须制作一个 JSONP,但是我从我的 JSON 请求中收到的数据是 XML,我怎样才能让它作为 JSON 返回?以下是我提出请求的代码:

    $.ajax({
        crossDomain: true,
        dataType: "jsonp",
        url: "http://localhost:9000/api/products",
        contentType: 'application/json; charset=utf-8',
        type: "get",
        success: function (data) {

            console.log(data);
        }
    });
4

1 回答 1

2

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

您的主要问题是 webapi 默认情况下没有注册 JSONP 媒体格式化程序。要完成您想要的,您需要三件事:

  1. 添加一个media formatter输出 JSONP的
  2. 注册媒体格式化程序
  3. 确保客户端请求 jsonP。

你可以窃取这个 JSONP 媒体格式化程序

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

var config = GlobalConfiguration.Configuration;
config.Formatters.Insert(0, new JsonpMediaTypeFormatter());

通常你Application_Start()global.asax.

您的查询看起来像是在请求 JSONP 就好了。完成上述操作后,它应该可以工作。重要的部分是accept发送的标头与您闪亮的新 jsonp 格式化程序正在侦听的接受标头匹配。在我看来,前两个选择是:(application/javascript就像你要求的那样)或text/javascript.

于 2012-05-21T21:23:38.193 回答