我正在处理一个应用程序,该应用程序将托管在MSCRM安装的单独子域中。在这个应用程序中,我依靠CRM的WebAPI来完成几个任务,如检索和记录创建。一切都在Internet Explorer中运行良好,但我仍然在FireFox和Chrome中出现令人讨厌的错误。到目前为止,我尝试了几种不同的方法,包括普通的XHR,JQuery / Ajax,Iframe和Jsonp(都是预构建的和手动的)。我确实在MSCRM服务器上的Web配置中包含了CORS头。继续注意到它已经在Internet Explorer中工作也很重要。
我从chrome收到的错误是:
XMLHttpRequest cannot load https://mycrm.mydomain/myorg/api/data/v8.0/new_entityname(00000000-0000-0000-0000-000000000000)?$select=new_fieldname,. Request header field Prefer is not allowed by Access-Control-Allow-Headers in preflight response.
在FireFox中,我只是没有收到任何消息。它根本不起作用。
这是我目前正在使用的功能。
var Request = function (query, successCallback, errorCallback) {
var _url = FormatString("{0}/{1}/api/data/v8.0/{2}", CrmConnection.BaseUrl, CrmConnection._org, query);
var req = new XMLHttpRequest();
req.open("GET", _url, true);
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("Prefer", "odata.include-annotations=\"*\"");
req.onreadystatechange = function () {
if (this.readyState === 4) {
req.onreadystatechange = null;
if (this.status === 200) {
var results = JSON.parse(this.response);
if (results["value"] || null != null)
successCallback(results.value);
else
successCallback(results);
}
else {
console.log("Begin Response Headers"); //
console.log(this.getAllResponseHeaders()); // Returns empty string
console.log("End Response Headers"); //
errorCallback(FormatString("XHRWAPI Error: '{0}';", this.statusText)); // The end result of this message is XHRWAPI Error: '' <-- It is also an empty string
}
}
};
req.send();
}
&#13;
这些是我添加到MSCRM安装的web.config中的标题。
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS" />
</customHeaders>
</httpProtocol>
即使我能指出正确的方向,也欢迎任何帮助。
答案 0 :(得分:0)
正如Jaromanda X所述,添加缺少的标题是解决方案。只需将标题添加到配置文件或IIS(如果适用)。