0

我要么尝试查询我的Web API OData服务时遇到400,404或405错误。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); 

我我目前收到错误:

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 

我也曾尝试设置这些值从IIS快递的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

这看起来像一个CORS问题,而不是微风问题。我知道你说你已经启用了它(看起来像你),但你需要更好的证据。一种比较快速的方法是编写一个带有脚本标签的HTML页面,并且该脚本标签是一个对OData端点的jQuery AJAX调用。如果成功返回,请写入控制台。然后打开开发工具(F12),看看发生了什么。 – Ward 2014-11-22 23:15:50

+0

尝试使用'.ajax({类型:“GET”, url:“http:// localhost:50056/odata/$ metadata” }) 。然后(function(){alert(“Got data”); })。catch(function(err){alert(“Failed:”+ err.message)});' – Ward 2014-11-22 23:19:06

+0

感谢您的回应!这确实有效,但微风给了我错误“No'Access-Control-Allow-Origin'标题出现在请求的资源上。” – socketman 2014-11-23 00:22:14

回答

0

我发现我的问题。我正在使用OData v4。显然datajs还不支持OData v4。在WebApiConfig中添加以下代码使事情更加平滑:

var cors = new EnableCorsAttribute("*", "*", "*", "DataServiceVersion, MaxDataServiceVersion"); 
config.EnableCors(cors); 
1

啊。目前,OData的Web Api实现充满了漏洞,包括但不限于滞后的data.js支持。

我与OData团队保持联系,希望我们能够尽快取得进展。

你真的需要OData吗?除非您需要支持开放客户端,否则直接使用Web Api会更好。

+0

我们的问题已与Web Api OData实现。你让我困惑。你的问题开始于对Web Api OData的引用。现在你正在谈论Java。至于客户端,我们的oob数据集服务依赖于datajs的功能。 FWIF,这就是为什么你在jQuery上设置CORS不起作用; datajs做自己的XHR。通常不必在浏览器上启用CORS,除非您使用旧浏览器。它需要了解更多关于您的服务器和目标浏览器的更多帮助。 – Ward 2014-11-24 16:54:21