Api Management возвращает пустой ответ, если присутствует заголовок источника - PullRequest
0 голосов
/ 29 августа 2018

Я делаю пост-запрос к API через Azure ApiManagement.

Если присутствует заголовок Origin и он не указан в политике Cors, даже почтальон вернет пустой ответ.

Как только я отключаю заголовок Origin, я могу получить ответ.

Итак, проблема заключается в том, что для веб-приложения мы должны включить cors,

   <cors allow-credentials="true">
        <allowed-origins>
          ${env:CorsOrigin}
        </allowed-origins>
        <allowed-methods>
          <method>*</method>
        </allowed-methods>
        <allowed-headers>
          <header>*</header>
        </allowed-headers>
      </cors>

Но наше приложение Cordova также вызывает тот же API, и по умолчанию Cordova добавит Origin: file:// Тогда управление Api делает странные вещи, которые порезают тело. Так что ответ будет пустым. Если я сделаю тот же запрос непосредственно к функции Azure, я получу правильный ответ, и поскольку cordova не заботится (в некоторой степени в нашем случае это нормально) о CORS, я бы ожидал, что управление API не сократит ответ.

Кроме того, управление Api не позволит мне войти *, так как allow-credentials = "true", а также я не могу установить разрешение file: //

1 Ответ

0 голосов
/ 31 августа 2018

APIM не поддерживает происхождение с файловой схемой, только http и https. Я посмотрю, сможем ли мы это исправить. Но есть обходной путь для allow-originins = * и allow-credentials = true - использовать выражения:

<allowed-origins>
    <origin>@(context.Request.Headers.GetValueOrDefault("Origin", "*"))</origin>
</allowed-origins>

Таким образом, ответ будет содержать отправленное значение заголовка Origin в Access-Control-Allow-Origin, а не просто *, что недопустимо.

...