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 に答える