2013-05-09 17 views
5

In MVC-4, Bündel für CSS Komprimieren & Js-Dateien können mit diesem Rasierer Syntax in einer Layoutdatei verknüpft werden: @Scripts.Render("~/JavaScripts")Wie generiert ein Bundle (Sytem.Web.Optimization) den Build-Fingerabdruck für Bundle-Links?

Dies erzeugt einen Link in der Layout-Datei, die eine fingerprint enthält, die generierte sind auf jedes App-Build, um die Cache-Kontrolle zu unterstützen.

So die erzeugte Link wie folgt aussieht:

<script src="/JavaScripts?v=dSMc_JTHMMP5GrWnILSYt_QBMw-g1pPlzknSorXpkyQ1"></script> 

Ich würde gerne wissen, wie der Fingerabdruck erzeugt wird (für ähnliche Zwecke zu verwenden), aber Sytem.Web.Optimization ist noch nicht Open-Source .

+1

Ich weiß nicht, über System.Web.Optimization, aber IIRC SquishIt verwendet Hashes der Dateiinhalte Erzeuge diesen Fingerabdruck. Sie können alle am Prozess beteiligten Dateien hashen und einen Hashwert verwenden, wenn der Zweck des Fingerabdrucks darin besteht, den Inhalt zu ändern, wenn sich Inhalt in einer Datei ändert. Als Referenz können Sie sich SquishIt Quelle ansehen -> https://github.com/jetheredge/SquishIt – tucaz

Antwort

6

Der Fingerabdruck wird erzeugt einen sha256 Hash des Bytes aus dem Bündel und anschließend codiert:

  byte[] hash = sha256.ComputeHash(Encoding.Unicode.GetBytes(bundle)); 
      return HttpServerUtility.UrlTokenEncode(hash); 
+0

Wann und wo passiert das? Gibt es ein Ereignis, das ich haken kann, um in diesem Fall meinen eigenen Code auszulösen? –