在我的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);
}
});
答案 0 :(得分:2)
从this duplicate ....中自由地偷窃。
您的主要问题是默认情况下没有在webapi中注册JSONP媒体格式化程序。要完成您想要的任务,您需要做三件事:
media formatter
您可以窃取此JSONP媒体formatter。
然后,您需要注册媒体格式化程序。您可以使用以下代码段以编程方式执行此操作:
var config = GlobalConfiguration.Configuration;
config.Formatters.Insert(0, new JsonpMediaTypeFormatter());
通常,您在Application_Start()
的{{1}}中执行此操作。
您的查询看起来好像正在请求JSONP。完成上述操作后,它应该可以工作。重要的部分是发送的global.asax
标头与您的闪亮的新jsonp格式化程序正在侦听的接受标头匹配。我认为最重要的两个选择是:accept
(就像您要求的那样)或application/javascript
。