breeze无法以xml格式获取元数据

时间:2015-07-18 16:31:24

标签: javascript odata breeze

我想使用带有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);

1 个答案:

答案 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;