2013-06-24 3 views
2

я могу получить доступ к API веб-сервиса с использованием стандартного JQuery Ajax вызова:breezejs: настройка службы для CORS

$.ajax('http://service/method', { 
contentType: 'application/json', 
type: 'GET', 
xhrFields: { 
    withCredentials: true 
    } 
}) 

На стороне сервера файл WebConfig сконфигурирован как таковой:

<customHeaders> 
    <clear/> 
    <add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS" /> 
    <add name="Access-Control-Allow-Origin" value="http://localhost:1502" /> 
    <add name="Access-Control-Allow-Headers" value="Content-Type,X-Requested-With, Authorization" /> 
    <add name="Access-Control-Allow-Credentials" value="true" /> 
    </customHeaders> 

Для теперь я пытаюсь добраться до службы с локального веб-сайта, работающего на порту 1502.

Однако, когда я использую бриз, я не вижу, как я могу указать параметр withCredential, и в результате я получаю 401ошибка.

ответ

4

Посмотрите на Breeze "ajax adapter". Следующий подход добавит «withCredentials» к каждому запросу Breeze XHR.

 
// get the current default Breeze AJAX adapter 
var ajaxAdapter = breeze.config.getAdapterInstance("ajax"); 
// merge 'withCredentials' into the settings Breeze passes to the jQuery.ajax method 
ajaxAdapter.defaultSettings = { 
     xhrFields: { 
      withCredentials: true 
     } 
}; 

Вы могли бы сделать более умный адаптер, если вам нужно добавить (или другую информацию) на запрос условно (например, для определенных URL-адресов, а не другие).

+0

спасибо, что помогли. Я редактировал свой пост, чтобы показать вам мой код инициализации сервиса. Я использую dataService, и я не вижу, как я могу повторно использовать код, который вы мне дали. Я не думаю, что я использую адаптер «ajax» в моем случае, или я? – Sam

+0

oups извините, я ответил слишком быстро. Он действительно работает с вашим кодом. Фантастично, вы помогли мне решить мою проблему с CORS! спасибо большое – Sam

+0

Я надеялся, что это сработает для меня, но когда этого не произошло, я попытался перейти по ссылке, чтобы узнать, есть ли дополнительная информация. Но ссылка мертва .... – Vaccano

0

Я пробовал вышеуказанный метод и, похоже, не работает с BreezeJS 1.6.3.

Однако, я смог заставить его работать с небольшими изменениями. Вот мой рабочий код: