2017-02-22 62 views
0

Я пытаюсь выполнить запрос с использованием REST API (sharepoint) и получить некоторые результаты.Cors issues with sharepoint

это где я начал

https://www.slideshare.net/CoreyRoth/fives-ways-to-query-share-point-2013-search-sharepoint-summit-toronto-2013, слайд 31

это то, что я есть

document.getElementById("restApi") 
      .addEventListener("click", restApi, false); 
    function restApi() { 

     var queryUrl = "https://myAppDomain.org/_api/search/query?querytext='" + $("#restSearch").val() + "'"; 

     $.ajax({ 
      type: "GET", 
      url: queryUrl, 
      xhrFields: { 
       withCredentials: true 
      }, 
      headers: { 
       "Accept": "application/json; odata=verbose" 
      }, 
      success: function (data) { 
       var results = data.d.query.PrimaryQueryResult.RelevantResults.Table.Rows.results; 
      }, 
      error: function (error) { 
      } 
     }); 
    } 

это проблема.

XMLHttpRequest не может загрузить "https://myAppDomain.org/_api/search/query?querytext=x" Нет 'Access-Control-Allow-Origin' заголовок присутствует на запрашиваемом ресурса. Origin 'http://localhost:63734' поэтому не разрешено доступ.

и другой способ я пытался предоставления пароля и имени пользователя

headers: { 
       "Accept": "application/json; odata=verbose", 
       "password": "my password", 
       "username": "my account name" 
      }, 

, для которого я получаю

XMLHttpRequest не может загрузить https://myAppDomain.org/_api/search/query?querytext=x. Ответ на предполетный запрос не проходит проверку контроля доступа: Нет Заголовок «Access-Control-Allow-Origin» присутствует на запрошенном ресурсе . Origin 'http://localhost:63734' поэтому не разрешено доступ. Ответ был HTTP кода статуса 401.

Я использую .net WebAPI, для которого я установил пакеты Корса, конфигурация

// Enabled cors 
config.EnableCors(new EnableCorsAttribute("*", "*", "*") { SupportsCredentials = true }); 

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

Так почему я получаю эту ошибку, то, что делать я неправильно ?, я искал и пробовал другие решения, но всегда получить ту же проблему, связанную с

Нет «Access-Control-Allow-Origin 'заголовок присутствует на запрашиваемом

+0

Можете ли вы показать свой метод контроллера, который вы пытаетесь ударить? – Dylan

+0

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

+0

. Итак, у вас нет контроля над веб-API? Вам не нужно CORS на стороне клиента. Кто бы вы ни делали запрос на необходимость иметь CORS на их стороне. – Dylan

ответ

1
  1. Открыть IIS
  2. Перейти к сайтам и найти свой Sharepoint сайт
  3. правой кнопкой мыши -> Explore
  4. Открыть web.config
  5. Добавьте следующий код внутри системы.WebServer узел

    <?xml version="1.0" encoding="utf-8"?> 
        <configuration> 
         <system.webServer> 
          <httpProtocol> 
           <customHeaders> 
           <add name="Access-Control-Allow-Origin" value="*" /> 
           </customHeaders> 
          </httpProtocol> 
         </system.webServer> 
        </configuration> 
    
  6. Сохранить и выйти

0

Если сервер разрабатывается вами

вы поставить „Access-Control-Allow-Origin: локальный“ в вашем .htaccess или в конфигурации веб-сервера?

Вы также можете добавить этот заголовок в свой ответ с сервера.

1

мне удалось решить мою проблему (частично, потому что я бы хотел использовать CSOM, а затем REST API на стороне клиента), позволяя крестик вызовы домена из моего приложения, непосредственно в приложение (приложение sharepoint), для которого я сделал запрос.

Так в запрашиваемом приложение я добавил следующий файл:

web.config

в разделе:

system.webServer/httpprotocol/customheaders

содержание:

<add name="Access-Control-Allow-Origin" value="https://myApplicationDomain.zzz" /> 
<add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" /> 
<add name="Access-Control-Allow-Headers" value="Content-Type" /> 
<add name="Access-Control-Allow-Credentials" value="true" />