0

正確に何が変更され、この部分的なエラーが発生したのかはわかりませんが (データの取得では発生していないため)、Microsoft.AspNet.WebApi.OData ライブラリを 5.3.x バージョンに更新した後、ブリーズはデータを OData コントローラーに保存する際に問題を抱えています。バッチリクエストのURLについてです。

これは、breeze 独自のサンプル OData プロジェクトでも再現できます。
http://www.breezejs.com/samples/breeze-web-api-odata

ExecuteRequestMessagesAsyncBatchHandler クラスのメソッドを見るRequestUriと、アイテムのプロパティに OData ルート プレフィックスが 2 回含まれています。

Microsoft.AspNet.WebApi.OData ライブラリ 5.2.2 の URL

http://localhost:55802/odata/TodoItems

Microsoft.AspNet.WebApi.OData ライブラリ 5.3.1 URL

http://localhost:55802/odata/odata/TodoItems

この問題を解決する方法はありますか?

風のバージョン: 1.5.1

4

1 に答える 1

4

ああ、喜び。Microsoft は Web API OData の実装を変更しました ... 再び

@coni2k を掘り下げて、問題を特定してくれてありがとう。

幸いなことに、Breeze にパッチを当てる必要はありません。メソッドは意図的に公開さgetRoutePrefixれているため、ニーズに合わせて外部から変更することができます。

次の例では、提案をメソッドの本文に組み込みました。

var adapter = breeze.config.getAdapterInstance('dataservice', 'webApiOdata');
adapter.getRoutePrefix = getRoutePrefix531; // plug-in alternative for THIS adapter instance.

function getRoutePrefix531(dataService) {
    // Copied from breeze.debug and modified for Web API OData v.5.3.1.
    if (typeof document === 'object') { // browser
      var parser = document.createElement('a');
      parser.href = dataService.serviceName;
    } else { // node
      parser = url.parse(dataService.serviceName);
    }
    // THE CHANGE FOR 5.3.1: Add '/' prefix to pathname
    var prefix = parser.pathname;
    if (prefix[0] !== '/') {
        prefix = '/' + prefix;
    } // add leading '/'  (only in IE)
    if (prefix.substr(-1) !== '/') {
        prefix += '/';
    } // ensure trailing '/'
    return prefix;
  };

私が書いているように、あなたが話している Web API OData のバージョンを検出する方法がわかりませgetRoutePrefix

最終的にこれを理解することを願っています。古いバージョンの Web API OData と通信する必要があるすべての既存のアプリが機能しなくなるため、デフォルトをこの新しいバージョンにあえて変更しないでください。どうすればこのゲームに勝てるかわからない。見ていきます。今のところイライラします。

于 2014-10-28T18:26:13.983 に答える