Я получаю ошибку 400, 404 или 405, пытающуюся выполнить запрос к службе OData для веб-API.Breezejs Web api Метод OData не разрешен
Мой пульт имя службы настроен на:
var remoteServiceName = 'http://localhost:50056/odata/';
В моей EntityManagerFactory у меня есть OData набор:
breeze.config.initializeAdapterInstance('dataService', 'webApiOData', true);
И в моей DataContext Я зову:
var manager = entityManagerFactory.newManager();
return breeze.EntityQuery.from('Courses')
.using(manager).execute()
.then(success).catch(failed);
I я в настоящее время получаю ошибку:
XMLHttpRequest cannot load http://localhost:50056/odata/$metadata. No 'Access-Control-Allow-Origin' header is present on the requested resource
Я могу получить доступ к этому пути только в браузере. Я нашел несколько ресурсов, чтобы предложить мне нужно установить httpProtocol в моем web.config следующим образом:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="*" />
</customHeaders>
</httpProtocol>
Но это просто дает мне
XMLHttpRequest cannot load http://localhost:50056/odata/$metadata. The 'Access-Control-Allow-Origin' header contains multiple values
Я также попытался установить эти параметры из файла applicationhost конфигурации IIS Express, но это дает мне следующее:
Invalid HTTP status code 400
Я также слышал, что добавление следующей установки в WebApiConfig должно работать:
config.EnableCors();
Но я не вижу никакого эффекта, и в качестве альтернативы я пробовал:
var cors = new EnableCorsAttribute(origins: "*", headers: "*", methods: "*");
config.EnableCors(cors);
Что также не имеет никакого эффекта. Я не вижу, что еще я могу потерять, поскольку исчерпал каждый ресурс, который я нашел в Интернете.
Я использую Visual Studio 2013 Express и используя экспресс-службу IIS.
Это выглядит как проблема CORS, а не проблема с Breeze. Я знаю, что вы говорите, что вы включили его (и похоже, что вы это сделали), но вам нужны лучшие доказательства. Один относительно быстрый подход - написать HTML-страницу с тегом скрипта, а внутри этого тега скрипта - вызов JQuery AJAX для конечных точек OData. Напишите на консоль, если она успешно вернется. Затем откройте Dev Tools (F12) и посмотрите, что происходит. – Ward
Попробуйте '$ .ajax ({ type:" GET ", URL:" http: // localhost: 50056/odata/$ metadata "}) .then (function() { alert ("Got data"); }). catch (function (err) {alert ("Failed:" + err.message)}; ' – Ward
Спасибо за ваш ответ! Это работает, но бриз дает мне ошибку «Нет» Access-Control-Allow-Origin 'header присутствует на запрошенном ресурсе ». – socketman