2013-12-13 15 views
6

現在、HotTowelテンプレートとともにBreeze.js(バージョン1.4.1)を使用しています。すべてがうまく機能しています。Breezeキャッシュバスト付きメタデータ要求URL

しかし、私は現時点ではrequire.jsと同じように、?v=1.0.0.1のような設定可能な接尾辞をメタデータに取得するために送信されたリクエストにbreezeインクルードを含める方法があるかどうか疑問に思っていました。バージョン変更中のローカルキャッシュ

これは、ユーザーがメタデータをローカルにキャッシュし、同じ変更されていないメタデータに対する不要な要求を回避できる利点があります。可能な場合には、サーバー側のキャッシュを持ち、メタデータの生成を完全に避けます。

実際のWebApiキャッシングについては、現在WebApi.OutputCacheを使用していますので、これにうまく収まるでしょう。

答えて

6

さて、WebApiルーティングだけでなく、breezeからの特別なサポートなしに、私はそれを実行する方法を見つけました。

私は基本的には次のコントローラのルート変更:

GlobalConfiguration.Configuration.Routes.MapHttpRoute(
      name: "BreezeApi", 
      routeTemplate: "breeze/{appVersion}/{controller}/{action}" 
     ); 

をそしてEntityManagerを作成するときに、次のように、私はそれを行う:

appVersion増分数値バージョン値を持つ
var manager = new breeze.EntityManager('breeze/' + appVersion + '/data'); 

[HttpGet] 
[CacheOutput(ClientTimeSpan = CLIENT_DURATION, ServerTimeSpan = SERVER_DURATION)] 
public string Metadata() 
{ 
    return _contextProvider.Metadata(); 
} 

が、私は誰かが内部的に風によって実装クリーナー液、または1を持っている場合は、未解決の問題を残しておきます:

これは、後でなど、メタデータアクションのキャッシュを設定できます。

+1

これはバージョン管理のための魅力的なテクニックです。それを共有してくれてありがとう。 – Ward

3

Breezeのドキュメントトピック "Load metadata from script"では、JavaScriptファイルのメタデータをキャプチャし、他のスクリプトの隣のindex.htmlに読み込む方法について説明しています。そのようなmetadata.jsに標準的なキャッシュ無効化技術を適用することもできます。また、ボートを浮かせる場合はCDNから配布することもできます。

+0

はい、私はそれを見ましたが、物理的に生成されたファイルを維持したり、WebDeployを使って自動的に展開しているため、起動時にアプリケーションが独自の物理構造を変更したりしないようにしました。幸運にも私は上記のように非常にうまく動作している簡単な解決策を見つけました。ところで、微風は素晴らしいです! :D –

+4

それは理にかなっています。実際には、私はこの質問とあなたの答えをここで指し示すために、風通しの書類(私が上で述べたもの)を更新する自由を取ったことは非常に意味があります。ありがとうございました:) – Ward

関連する問題