由于“501(未实现)”,元数据的初始加载失败

时间:2015-05-19 06:37:18

标签: odata sapui5

我正在尝试使用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");
}

2 个答案:

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

简而言之,这就是您的情况:

  1. 客户端使用方法OPTIONS发送预检请求,以查看服务器允许的请求类型。
  2. 服务器响应它不理解该OPTIONS请求。
  3. 客户报告“ OPTIONS ... 501(未实施)”。

为了避免这种情况,您必须通过代理服务器。请仔细阅读主题急救箱: Request Fails Due to Same-Origin Policy (Cross-Origin Resource Sharing - CORS) ,以了解如何根据您的开发环境使用代理服务器。


示例:SAP Web IDE和SAP Cloud Platform(SCP)

  1. 在SCP上定义相应的目的地:

    SCP destination setting for northwind OData service
    来源:Create Northwind Destination
    然后,SCP将充当Northwind服务的代理服务器。之所以可行,是因为与浏览器相比,相同的原始策略不适用于服务器。

  2. 要在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"
        }
      ]
    }
    
  3. 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 。此外,每个时段的请求数也受到限制。