我正在尝试使用Northwind R / W OData服务链接:
http://services.odata.org/V3/(S(frik5l2zde0sxh4jiifyhqo4))/OData/OData.svc/
proxy/http/services.odata.org/V3/(S(frik5l2zde0sxh4jiifyhqo4))/OData/OData.svc
在本地测试中工作正常。现在当我想将它ftp到我的域名时,它不起作用......
NetworkError:404 Not Found - HTTP:// {MYDOMAIN} /proxy/http/services.odata.org/V3/(S(frik5l2zde0sxh4jiifyhqo4))/OData/OData.svc/$metadata
使用不使用代理,如http://services.odata.org/V3/(S(frik5l2zde0sxh4jiifyhqo4))/OData/OData.svc/
,错误为
NetworkError:501未实现
代码:
onInit: function() {
var serviceUrl = "http://services.odata.org/V3/(S(frik5l2zde0sxh4jiifyhqo4))/OData/OData.svc/";
var oModel = new sap.ui.model.odata.ODataModel(serviceUrl);
oModel.oHeaders = {
"DataServiceVersion": "3.0",
"MaxDataServiceVersion": "3.0"
}
sap.ui.getCore().setModel(oModel, "products");
}
答案 0 :(得分:6)
当你使用Northwind时,我认为它只适用于开发。因此,您可以使用https://cors-anywhere.herokuapp.com/
来访问跨源资源。
var oModel = new ODataModel({
serviceUrl: "https://cors-anywhere.herokuapp.com/https://services.odata.org/V2/(S(frik5l2zde0sxh4jiifyhqo4))/OData/OData.svc/"
});
或者另一种方法是禁用chrome中的安全标志以进行开发。
答案 1 :(得分:1)
问题是来自 odata.org currently don't support CORS的服务。要了解它是什么,请参阅:
-> What is CORS / Same Origin Policy?
简而言之,这就是您的情况:
OPTIONS
发送预检请求,以查看服务器允许的请求类型。OPTIONS
请求。为了避免这种情况,您必须通过代理服务器。请仔细阅读主题急救箱: Request Fails Due to Same-Origin Policy (Cross-Origin Resource Sharing - CORS) ,以了解如何根据您的开发环境使用代理服务器。
在SCP上定义相应的目的地:
来源:Create Northwind Destination
然后,SCP将充当Northwind服务的代理服务器。之所以可行,是因为与浏览器相比,相同的原始策略不适用于服务器。
要在SCP和Web IDE之间创建链接,请从Web IDE项目文件夹中相应地编辑 neo-app.json 和 manifest.json :>
在 neo-app.json 中,添加以下路由:
{
"routes": [
...,
{
"path": "/destinations/northwind",
"target": {
"type": "destination",
"name": "northwind"
},
"description": "Northwind OData Service"
}
]
}
在 manifest.json 中,以下数据源:
"sap.app": {
"dataSources": {
"invoiceRemote": {
"uri": "/destinations/northwind/V2/Northwind/Northwind.svc/",
"type": "OData",
"settings": {
"odataVersion": "2.0"
}
}
}
}
每当浏览器在请求URI的开头发送带有/destinations/northwind/
的XHR请求时,Web IDE都会将该请求传递给代理服务器(SCP),然后由代理服务器(SCP)代表客户端获取数据。
公共代理服务 cors-anywhere.herokuapp.com 也可以使用,但是它会按顺序预先发送每个带有预检请求的请求(每次两个请求),因为预检请求不会被缓存该代理服务器默认为 source 。此外,每个时段的请求数也受到限制。