Включение CORS в Chrome и FF для веб-API MSCRM (кросс-субдомен)
Я работаю над приложением, которое будет размещено на отдельном поддомене от нашей установки MSCRM. В этом приложении я полагаюсь на WebAPI CRM для выполнения нескольких задач, таких как поиск и создание записей. В Internet Explorer все работает хорошо, но я продолжаю получать неприятные ошибки в FireFox и Chrome. До сих пор я пробовал несколько разных методов, включая обычный XHR, JQuery/Ajax, Iframe и Jsonp (как предварительно скомпонованные, так и вручную). Я действительно включил заголовок CORS в веб-конфигурацию на сервере MSCRM. Также важно продолжать отмечать, что это уже работает в 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();
}
Это заголовки, которые я добавил в установочный файл web.config MSCRM.
<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>
Даже если бы я мог указать правильное направление, любая помощь здесь ценится.
1 ответ
Как заявила Jaromanda X, добавление отсутствующих заголовков было решением. Просто добавьте заголовки в ваш конфигурационный файл или IIS, где это применимо.