CORS и несанкционированная ошибка с запросом на мыло - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь сделать SOAP-запрос от моего реагирующего веб-приложения на Dynamics NAV 2017, и я получаю следующие ошибки:

1) ВАРИАНТЫ http: // ... 401 (неавторизовано)

2) Доступ к XMLHttpRequest по адресу 'http: ...' from origin 'http://localhost:3000' заблокирован политикой CORS: Ответ на предварительный запрос не проходит проверку контроля доступа: Нет' Access-Заголовок Control-Allow-Origin 'присутствует в запрошенном ресурсе.

Вот мой код:

    let soap = () => {
        var result = null;
        var urlsoap = 'http://schemas.xmlsoap.org/soap/envelope'; 

        try { 
            var xmlhttp; 
            if (window.XMLHttpRequest) {
                xmlhttp = new XMLHttpRequest(); 
            } 

            let request = `
            <soapenv:Envelope xmlns:Soap=${urlsoap}> 
                <soapenv:header>
                <soapenv:Body>
                    <ValidateUser>
                        <userName>SOMEUSER</userName>
                    </ValidateUser>
                </soapenv:Body>
                </soapenv:header>
            </soapenv:Envelope>`;



            // Setup event handler when readystate changes 
            xmlhttp.onreadystatechange = function() { 
                if (xmlhttp.readyState === 4) { 
                    if (xmlhttp.status === 200) { 
                        var xmldoc = xmlhttp.responseXML; 
                        xmldoc.setProperty('SelectionLanguage', 'XPath'); 
                        xmldoc.setProperty('SelectionNamespaces', 'xmlns:tns="' + 'urn:microsoft-dynamics-schemas/codeunit/...' + '"'); 
                        result = xmldoc.getElementsByTagName('ValidateUser_Result');
                    } 
                } 
            }


            xmlhttp.open('POST', URL, true);  
            xmlhttp.setRequestHeader('SOAPAction', 'POST');
            xmlhttp.setRequestHeader('Access-Control-Allow-Origin','*');
            xmlhttp.setRequestHeader('Access-Control-Allow-Origin','Content-Type');
            xmlhttp.setRequestHeader('Access-Control-Allow-Origin','GET,PUT,POST,DELETE');
            xmlhttp.setRequestHeader("Authorization", "Basic " + btoa(myusername:mypassword));
            xmlhttp.setRequestHeader('Content-Type', 'text/xml; charset=utf-8');
            xmlhttp.withCredentials = true;
            xmlhttp.send(request); 

        } 

        catch (e) { 
            console.log(e);
        } 

        return result; 
    }

    soap();

Это мой первый запрос на мыло, поэтому синтаксис может быть неправильным.Я уже попробовал пакет 'easy-soap-request', но получаю те же ошибки.Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 16 января 2019

Установка заголовков CORS для NAV WebService напрямую невозможна, поэтому мы в конце концов решили использовать node.js в качестве прокси-сервера и установить там заголовки cors.Это действительно сработало очень хорошо.

...