Проблема CORS в управлении API Azure

Я использую управление API Azure для внутреннего доступа к моей веб-службе Python Flask. API Azure хорошо работает для операций GET. Для POST, когда я делаю вызов jquery AJAX, запрос преобразуется в ОПЦИИ, и появляется следующая ошибка

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://domain.com' is therefore not allowed access. The response had HTTP status code 500.

Я добавил следующую политику для Azure API,

<policies>
    <inbound>
        <cors>
            <allowed-origins>
                <origin>*</origin>
            </allowed-origins>
            <allowed-methods>
                <method>*</method>
            </allowed-methods>
            <allowed-headers>
                <header>*</header>
            </allowed-headers>
        </cors>
        <base />
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>

Но все же я сталкиваюсь с той же проблемой.

Та же ошибка появилась, когда я напрямую отправляю запрос AJAX POST в мою службу фляги python, и я исправил ее, добавив в флягу следующий код:

@app.after_request
def after_request(response):
  response.headers.add('Access-Control-Allow-Origin', '*')
  response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
  response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE')
  return response

Что мне нужно изменить в управлении API Azure, чтобы операция POST заработала?


person Selva    schedule 25.09.2015    source источник
comment
Я недавно заметил сбои CORS и в моем API Azure на сегодняшний день. Для вас это тоже недавняя проблема?   -  person Haymaker87    schedule 25.09.2015
comment
Мы их тоже заметили, вчера начали.   -  person Brian    schedule 26.09.2015
comment
да. Совсем недавно возникшая проблема, потрачен на нее целый день. Не ожидал от Microsoft   -  person Selva    schedule 26.09.2015


Ответы (3)


В последней версии была ошибка CORS, которая теперь исправлена.

person JJ.    schedule 26.09.2015

В своем тесте я установил подстановочные знаки (*) в теге origin и воспроизвел вашу проблему, затем я попытался указать URL-адрес в теге allow-origins для среды разработки как http://localhost:8801 вместо (*), и он был отправлен через.

Вот мои фрагменты кода для вашего сведения:

Полиция: <inbound> <cors allow-credentials="false"> <allowed-origins> <origin>http://localhost:8801</origin> </allowed-origins> <allowed-methods> <method>*</method> </allowed-methods> <allowed-headers> <header>*</header> </allowed-headers> </cors> <base /> </inbound>

Код JS - это пример, показанный на портале управления API:

$(function() { $.ajax({ url: "https://garytest.azure-api.net/testpost/", beforeSend: function(xhrObj){ // Request headers xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key","{subscription key}"); }, type: "POST", // Request body data: {name:'gary',sex:'male'}, }) .done(function(data) { alert("success"); }) .fail(function() { alert("error"); }); });

Сервис Flask прост: @app.route('/post',methods=['POST']) def post(): name = request.form['name'] sex = request.form['sex'] return "post name: "+name+", sex:"+sex

Пожалуйста, попробуйте указать происхождение и повторите попытку.

person Gary Liu    schedule 28.09.2015

Temp ignore cors check с этой конфигурацией

<cors allow-credentials="false">
        <allowed-origins>
            <!-- Localhost useful for development 
            <origin>http://localhost:4200</origin>-->
            <origin>*</origin>
        </allowed-origins>
        <allowed-headers>
            <!-- Examples below show Azure Mobile Services headers -->
            <header>*</header>
        </allowed-headers>
        <expose-headers>
            <!-- Examples below show Azure Mobile Services headers -->
            <header>*</header>
        </expose-headers>
    </cors>
person Luu Quoc Thang    schedule 11.09.2020