我想使用带有odata服务的微风:http://services.odata.org/V3/OData/OData.svc
breeze.config.initializeAdapterInstances({dataService: "OData"});
var ms = new breeze.MetadataStore();
ms.fetchMetadata("http://services.odata.org/V3/OData/OData.svc")
.then(function(rawMetadata) {...});
或者,像这样:
breeze.config.initializeAdapterInstances({dataService: "OData"});
var em = new breeze.EntityManager("http://services.odata.org/V3/OData/OData.svc");
em.fetchMetadata()
.then(function(rawMetadata) {...});
但是,当我看到breeze尝试以json格式获取odata时,此服务仅支持atom / xml元数据。
回复标题:
内容类型:应用/ JSON; odata.metadata =最小; odata.streaming = TRUE; IEEE754Compatible = FALSE;字符集= utf-8的
错误消息:
选项http://services.odata.org/V3/OData/OData.svc/ $元数据。 501未实施
XMLHttpRequest无法加载http://services.odata.org/V3/OData/OData.svc/ $元数据。无效的HTTP状态代码501
当我用jQuery调用这个URL时,一切都很顺利:
$.ajax({
url: 'http://services.odata.org/V3/OData/OData.svc/$metadata',
dataType: 'xml',
type: 'GET'
}).done(function(data, st, xhr) {...});
,这种情况也有效:
OData.defaultHttpClient.formatQueryString = '$format=application/json;odata=fullmetadata';
OData.defaultHttpClient.enableJsonpCallback = true;
OData.read("http://services.odata.org/V3/OData/OData.svc/Products",
function (data, response) { alert(data.results[0]); },
function (err) { alert(err.trace); }
);
但是这种情况不起作用:
OData.read("http://services.odata.org/V3/OData/OData.svc/$metadata",
function (data, response) { alert(data.results[0]); },
function (err) { alert(err.trace); },
OData.metadataHandler);
答案 0 :(得分:0)
您在此假设上述服务仅支持atom / xml格式,这是错误的。您可以将?$format=json
放在网址的末尾。
无论如何要回答你的问题,以防你的真实服务实际上不支持json,你需要修改你使用breeze做出的请求的标题。 Breeze在其堆栈中使用Data.js进行oData调用。在初始化dataService之前,您可以直接进行下面的代码。
var oldClient = odatajs.oData.defaultHttpClient;
var myClient = {
request: function (request, success, error) {
//request.headers.Accept = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8';
var oHeaders = {
'Accept': 'text/html,application/xhtml+xml,application/xml,application/json;odata.metadata=minimal',
"Odata-Version": "4.0",
"OData-MaxVersion": "4.0",
"Prefer": "odata.allow-entityreferences"
};
request.headers = oHeaders;
return oldClient.request(request, success, error);
}
};
odatajs.oData.defaultHttpClient = myClient;