2013-12-13 8 views
6

Ich verwende Breeze.js (Version 1.4.1) zusammen mit der HotTowel-Vorlage, und alles funktioniert wunderbar.Breeze Metadatenanforderungs-URL mit Cache-Bust

Aber ich habe mich gefragt, ob es einen Weg Brise zu haben sind in der Anfrage die Metadaten eine konfigurierbare Suffix zu erhalten gesendet, wie ?v=1.0.0.1, in ähnlicher Weise zu dem, was ich bin derzeit mit require.js tun die Büste lokaler Cache bei Versionsänderungen.

Dies würde den Vorteil bieten, dass Benutzer die Metadaten lokal zwischenspeichern und unnötige Anforderungen für dieselben unveränderten Metadaten vermeiden. Sogar serverseitiges Caching und Vermeidung der Metadatengenerierung nach Möglichkeit.

Für die tatsächliche WebApi-Caching verwende ich derzeit WebApi.OutputCache, so dass würde gut damit passen.

Antwort

6

Nun, ich habe einen Weg gefunden, es zu tun, ohne jede spezifische Unterstützung von Brise, nur WebApi Routing.

Ich habe gerade im Grunde den Controller Route auf die folgenden:

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

Und dann, wenn die EntityManager zu schaffen, mache ich es wie folgt:

var manager = new breeze.EntityManager('breeze/' + appVersion + '/data'); 

Wo appVersion die inkrementale numerische Version Wert hat .

Auf diese Weise können Sie später Caching für die Metadaten-Aktion konfigurieren, wie zum Beispiel:

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

Ich werde die Frage offen, falls verlassen jemand eine sauberere Lösung hat, oder durch Brise implementiert ein intern.

+1

Das ist eine faszinierende Technik für Versionierung, Pablo. Danke, dass du es geteilt hast. – Ward

3

Sie können sich das Breeze-Dokumentationsthema "Load metadata from script" ansehen, in dem das Erfassen von Metadaten in einer JavaScript-Datei und das Laden in die index.html neben anderem Skript beschrieben wird. Sie könnten Standard-Cache-Busting-Techniken auf solche metadata.js anwenden und sogar von einem CDN verteilen, wenn das Ihr Boot schwimmt.

+0

Ja, ich habe mir das angeschaut, aber ich wollte nicht, dass eine physisch generierte Datei beibehalten wird oder dass die Anwendung während des Startvorgangs ihre eigene physische Struktur ändert, da ich sie automatisch über WebDeploy bereitstelle. Glücklicherweise fand ich eine schnelle Lösung wie oben gezeigt, die recht gut funktioniert. BTW, Brise ist super! : D –

+4

Das macht Sinn. In der Tat macht es so viel Sinn, dass ich mir die Freiheit genommen habe, die Brise-Dokumentation (die ich oben erwähnt habe) zu aktualisieren, um auf diese Frage und Ihre Antwort hier zu zeigen. Dank dafür :) – Ward

Verwandte Themen