Добавить доступ к документу запрещен

Мы создали проект AngularJS 1 и можем успешно использовать функцию поиска с помощью POST. Мы добавили контроллер для добавления документов в индекс, но продолжаем получать сообщение

XMLHttpRequest: ошибка сети 0x80070005, доступ запрещен

И по тому же индексу ищем.

Мы позаботились о том, чтобы CORS был включен для индекса.

Вот наш код:

var value = [
  {
    "@search.action": "mergeOrUpload",
    "id": vm.id,
    "name": vm.name,
    "keywords": vm.keywords,
    "url": vm.url
  }
];

var url = "https://xxx.search.windows.net/indexes/xxx/docs/index?api-version=2015-02-28";

ModalService.showLoading();

$http({
  method: "POST",
  url: url,
  headers: {
    "api-key": "XXX",
    "Content-Type": "application/json"
  },
  data: {
    "value": value
  }
})
.success(function (data, status) {
  vm.results = data;
  ModalService.hideLoading();
})
.error(function (data, status) {
  ModalService.hideLoading();
  ModalService.showError(data);
});

Существует документация о том, что вы можете использовать REST для добавления новых документов, поэтому я не уверен, что нам не хватает.


person Andre Odendaal    schedule 03.11.2016    source источник


Ответы (1)


Поиск Azure разрешает запросы только через CORS. Это описано в MSDN:

Параметры CORS Клиентский JavaScript по умолчанию не может вызывать какие-либо API, так как браузер будет предотвращать все запросы из разных источников. Чтобы разрешить запросы к вашему индексу из разных источников, включите CORS (совместное использование ресурсов из разных источников), установив атрибут corsOptions. Обратите внимание, что из соображений безопасности только API запросов поддерживают CORS.

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

Мы рекомендуем вам выполнять любые операции, изменяющие ваш индекс, из службы, которая может сначала аутентифицировать клиента.

person Bruce Johnston    schedule 03.11.2016