我要么尝试查询我的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。
这看起来像一个CORS问题,而不是微风问题。我知道你说你已经启用了它(看起来像你),但你需要更好的证据。一种比较快速的方法是编写一个带有脚本标签的HTML页面,并且该脚本标签是一个对OData端点的jQuery AJAX调用。如果成功返回,请写入控制台。然后打开开发工具(F12),看看发生了什么。 – Ward 2014-11-22 23:15:50
尝试使用'.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
感谢您的回应!这确实有效,但微风给了我错误“No'Access-Control-Allow-Origin'标题出现在请求的资源上。” – socketman 2014-11-23 00:22:14