Angular 7 вызывает службу индексатора Azure

Я пытаюсь запустить индексатор, который у меня есть в Azure, из веб-приложения, созданного в Angular. Я нашел документацию здесь. Однако всякий раз, когда я пытаюсь запустить индексатор в соответствии с этой документацией, CORS блокирует меня. Вот код, который вызывает индексатор в моем service.ts

public async runIndex(){
        const httpHeaders = new HttpHeaders({
            'api-key': "api-key's value here",
            'Accept': 'application/json'
            'content-type': 'application/json'});

        let params = new URLSearchParams();
        params.set('api-version', this.apiVersion);

        await this.speechHttp.post(this.indexUrl, params, {headers: httpHeaders}).subscribe(
            error => this.errorMessage = <any>error
        ); 

Это не сработало, поэтому я продолжил копать и среди статей, которые я прочитал, я нашел Вот этот, в котором говорилось, что вызовы API должны выполняться с порта 443. Поэтому я изменил порт 4200 по умолчанию Angular на порт 443, но это все еще не работает. . Я пытался создать прокси-файл, а затем запустить ng serve --proxy-config proxy.conf.json, но это тоже не сработало. Есть ли способ решить эту проблему в Angular? В прошлый раз, когда у меня возникла проблема CORS с созданным мной API, мне пришлось исправить проблему на стороне сервера/API, но у меня нет доступа к API индексатора Azure.

Вот сообщение об ошибке CORS.

Access to XMLHttpRequest at 'https://my-indexer.search.windows.net/indexers/my-indexer/run?api-version=2019-05-06' from origin 'http://localhost:443' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Похоже, что API блокирует запрос, несмотря на то, что источником запроса является предлагаемый порт 443.

🤔 А знаете ли вы, что...
Для создания пользовательских интерфейсов в Angular используется декларативный язык шаблонов.


133
1

Ответ:

Решено

Вы не могу получить доступ API управления из браузера. Это сделано для защиты ключей администратора, так как их встраивание во внешнее приложение представляет собой угрозу безопасности. Вы можете установить пользовательские определения CORS для самих индексов, чтобы разрешить доступ к ним через браузер, но этот параметр недоступен для индексаторов.

Если вы хотите включить запуск индексатора из веб-клиента, например из области администрирования, вам потребуется, чтобы ваше приложение Angular вызывало ваш серверный API, а API мог вызывать поиск Azure.