已被CORS政策阻止:飞行前响应中Access-Control-Allow-Headers不允许请求标头字段x-xhr-logon

时间:2019-02-05 13:00:17

标签: sapui5 sap sap-fiori

我正在尝试在sap ui5中使用外部Restful Web服务。当我在fiori启动板中使用相同的内容时,它将在cosole中抛出错误,并且平铺应用程序中没有数据。我该如何解决呢?我检查了许多博客,但都没有得到任何帮助。

错误: CORS策略已阻止从来源“ url2”访问“ https://api.myjson.com/bins/ijyy2”处的XMLHttpRequest:在飞行前响应中,Access-Control-Allow-Headers不允许请求标头字段x-xhr-logon。

注意:url2 = https://sapmobile.mycompanyname.com只是我们的意思 启动板网址。

最佳问候 拉姆

1 个答案:

答案 0 :(得分:0)

这是一个已知的Fiori Launchpad问题。有一个文件abap.js覆盖了send的默认XMLHttpRequest方法。

如果将外部API添加为SAP Cloud Platform中的新目的地(或在内部部署环境中使用Web Dispatcher),则不会再有CORS调用,因此就不会有CORS问题。

如果您要使用纯JavaScript解决方案,则可以使用两个函数来还原原始实现。将它们添加到您的控制器。

在访问外部API之前立即调用以下内容

_overrideRequestPrototype: function () {
    if (!XMLHttpRequest._SAP_ENHANCED) {
        return;
    }
    this.__send = XMLHttpRequest.prototype.send;
    XMLHttpRequest.prototype.send = function (oBody) {
        let oChannel = {};
        this._checkEventSubscriptions();
        try {
            oChannel = this._channel;
            this._saveParams(oBody);
            this._send(oBody);
            if (oChannel) {
                oChannel.sent();
            }
        } catch (oError) {
            if (oChannel) {
                oChannel["catch"](oError);
            } else {
                throw oError;
            }
        }
    };
}

通话后,使用以下功能恢复SAP代码:

_restoreRequestPrototype: function () {
    if (!XMLHttpRequest._SAP_ENHANCED) {
        return;
    }
    XMLHttpRequest.prototype.send = this.__send;
}