sapui5 - 已被 CORS 策略阻止:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 x-xhr-logon
问题描述
我正在尝试在 sap ui5 中使用外部宁静的 Web 服务。当我在 fiori 启动板中使用相同的内容时,它会在 cosole 中引发以下错误,并且磁贴应用程序中没有数据。我怎么能克服呢?我检查了许多与此相关的博客,但没有得到任何帮助。
错误:从源“url2”访问“ https://api.myjson.com/bins/ijyy2 ”处的 XMLHttpRequest 已被 CORS 策略阻止:Access-Control-Allow 不允许请求标头字段 x-xhr-logon - 预检响应中的标头。
注意:url2= https://sapmobile.mycompanyname.com只不过是我们的 fiori 启动板 url。
解决方案
这是一个已知的 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;
}
推荐阅读
- php - 出现用户使用数据库在 Web PHP 中输入的图片
- react-native - 使用 React Native 中的图像推送通知
- rust - 为什么创建和写入一个非常大的向量会导致核心转储?
- php - 复杂的 PHP 错误:试图转义数组
- css - 问题将复选框和文本内联
- c# - C# Bot 框架 LUIS 意图
- python - 使用 dot(.) 访问字典键
- powershell - Powershell Studio 2018 - 如何正确检索文本框值?
- haskell - 将 monad 转换为 IO
- java - jasper 报告中 REPORT_LOCALE 中的语言不可用