0

我在尝试查询我的 Web API OData 服务时遇到 400、404 或 405 错误。

我的远程服务名称配置为:

var remoteServiceName = 'http://localhost:50056/odata/';

在我的 entityManagerFactory 我有 Odata 集:

breeze.config.initializeAdapterInstance('dataService', 'webApiOData', true);

在我的数据上下文中,我正在调用:

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。

4

2 回答 2

1

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

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

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

于 2014-11-23T16:09:50.723 回答
0

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

var cors = new EnableCorsAttribute("*", "*", "*", "DataServiceVersion, MaxDataServiceVersion");
config.EnableCors(cors);
于 2014-11-23T02:07:46.823 回答