WebApi - 当我将其作为JSONP请求时,数据以XML格式返回

时间:2012-05-21 21:18:12

标签: jquery json asp.net-mvc-3 jsonp asp.net-web-api

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

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

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

在我的另一个客户端上,我必须制作一个JSONP,因为我的API托管在同一个域上(仅限开发),但我从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);
        }
    });

1 个答案:

答案 0 :(得分:2)

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

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

  1. 添加输出JSONP的media formatter
  2. 注册媒体格式化程序
  3. 确保客户端请求jsonP。
  4. 您可以窃取此JSONP媒体formatter

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

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

    通常,您在Application_Start()的{​​{1}}中执行此操作。

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