不允许Breezejs Web api OData方法

时间:2014-11-22 21:05:06

标签: asp.net odata breeze asp.net-web-api2 asp.net-web-api-odata

我要么在尝试查询我的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。

2 个答案:

答案 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);