我要么在尝试查询我的Web API OData服务时遇到400,404或405错误。
我的远程服务名称配置为:
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);
我目前收到错误:
XMLHttpRequest cannot load http://localhost:50056/odata/$metadata. No 'Access-Control-Allow-Origin' header is present on the requested resource
我可以在浏览器中正常访问此路径。我找到了几个资源,建议我需要在web.config中设置httpProtocol,如下所示:
<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
我还尝试从IIS Express的applicationhost配置文件中设置这些设置,但这给了我以下内容:
Invalid HTTP status code 400
我也听说过将以下设置添加到WebApiConfig应该有效:
config.EnableCors();
但我认为没有效果,或者我尝试过:
var cors = new EnableCorsAttribute(origins: "*", headers: "*", methods: "*");
config.EnableCors(cors);
哪个也没有效果。我不知道还有什么我可以丢失,因为我已经用尽了我在网上找到的所有资源。
我正在使用Visual Studio 2013 express并使用IIS express。
答案 0 :(得分:1)
稀释。目前,OData的Web Api实现充满了漏洞......包括但不限于滞后data.js支持。
我与OData团队保持联系,并希望我们能尽快取得进展。
你真的需要OData吗?除非您需要支持开放式客户端,否则直接使用Web Api会更好。
答案 1 :(得分:0)
我发现了我的问题。我正在使用OData v4。显然datajs还不支持OData v4。在WebApiConfig中添加以下代码可以进一步平滑:
var cors = new EnableCorsAttribute("*", "*", "*", "DataServiceVersion, MaxDataServiceVersion");
config.EnableCors(cors);