【问题标题】:WebApi - Data returns as XML when I request it as JSONPWebApi - 当我以 JSONP 形式请求数据时,数据以 XML 形式返回
【发布时间】:2012-05-28 09:31:09
【问题描述】:

在我的 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);
        }
    });

【问题讨论】:

  • 您似乎仍在使用现已过时的 WCF Web API,而不是较新的 ASP.NET Web API。见nuget.org/packages/AspNetWebApi
  • @DarrelMiller - 很好。我什至没有注意到WebGet 属性。
  • 我已经把它换成使用 ASP.NET Web API 并使用EBarr的答案

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


【解决方案1】:

大量窃取this duplicate....

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

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

你可以窃取这个 JSONP 媒体formatter

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

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

通常您在Application_Start() 中在global.asax 中执行此操作。

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

【讨论】:

    猜你喜欢
    • 2022-08-06
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 2010-11-15
    • 2020-09-27
    • 2012-07-23
    • 2017-08-08
    相关资源
    最近更新 更多