MVC-bundle-client-caching
Standardmäßig eine MVC-bundle-Cache auf der client für 1 Jahr. Ist es möglich, um es client-Header manuell (für 1 bestimmtes bundle)?
Was ich brauche, ist das festlegen benutzerdefinierter expire-Header für eines meiner Pakete. Ich kann nicht Sie verlassen sich auf die "v=hash" querystring, weil dieses bundle ist für eine externe website, und Sie ändern nicht die url zu meinem bundle jedes mal, wenn ich es ändern.
Was ich versucht habe ist, erstellen Sie ein benutzerdefiniertes Bundle-Klasse (Erben Bundle) und overridde die GenerateBundleResponse () - Methode. Auf diese Weise kann ich die Kontrolle über die server-caching, aber der einzige Weg customizing client-caching zu setzen, ist BundleResponse.Cachefähigkeit (public, private nocache, etc). Aber ich kann nicht festlegen Header manuell. Ich habe Zugriff auf den BundleContext (und es ist HttpContext), aber wenn ich den Header in diesem Zusammenhang wird es Auswirkungen auf alle anderen Anfragen auch.
InformationsquelleAutor stian.net | 2013-01-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Leider gibt es keine Möglichkeit. Sie finden den Grund in der internen Implementierung der Bündelung. in der
BundleHandler
- Klasse ruft die Methode ProcessRequestProcessRequest
, interne Methode derBundle
Klasse und ruft SetHeaders kurz vor derHttpContext.Response.Write
. Daher wird der client-cache wird zu einem Jahr, kurz bevor Sie die Antwort schreiben.Hinweis:
BundleHandler
ist eine interne versiegelte Klasse:internal sealed class BundleHandler : IHttpHandler
In der
BundleHandler
Klasse:In der
Bundle
Klasse:InformationsquelleAutor Kambiz Shahim
Dem Standard-Verhalten des ASP.NET MVC-bundling-Funktion ist, dass, wenn eine der Dateien, aus denen ein Bündel ändern - der query-string für das bundle automatisch ändern - vorausgesetzt, Sie sind mit der folgenden, die in Ihrer view-code:
Also das heißt, wenn Sie eine neue version einer Datei, die in einem bundle, das nächste mal Ihre Seite rendert ein view verwendet, der bundle, sendet es ein script-tag, dass der browser des Clients wird nicht im cache gefunden (da der query-string ist).
So scheint es, wie dies Ihr problem lösen wird - hängt davon ab, was du damit meinst:
Ich glaube, ich verstehe, - - - Sie Bearbeiten sollte deine Frage ein wenig deutlicher -, dass Sie möchten, dass eine externe Seite zu include <script src="/yoursite/bundlename?v=xxxxxxxx"></script>
Fügen Sie einfach die Zecken auf die Abfrage-string-bundle, unabhängig von der version ist. Das erlöschen client-caching.
InformationsquelleAutor Adam
Zwar gibt es nicht einen besseren Weg, um das setup-bundles cachefähigkeit, können Sie erstellen ein HttpModule identifiziert, die die Anforderungen an das Paket und den Inhalt cachefähigkeit.
Haben Sie die gleiche Wirkung tun dies auf der Globalen.asax:
InformationsquelleAutor Adilson de Almeida Jr
Was scheint zu funktionieren für mich ist die Angabe der bundle-version-Nummer im bundle config, dann verweisen Sie die neue version in Ihrem markup.
Warum aber? Wenn dies eine tragfähige Lösung, was ist falsch mit der Veröffentlichung als solche?
nur die smart-Benutzer können den post in den Kommentaren Abschnitt, an dem mindestens 50 Punkte erforderlich, andernfalls können Sie nur eine Frage beantworten
InformationsquelleAutor Jarrod Moura
Pass eine extra query-string-parameter an die url, und ändern Sie es bleiben, Sie wollen den cache zu aktualisieren.
e.g: https://www.google.co.in/?gfe_rd=cr&ei=EwJeVbHWLcX08wfgwoCoBA&gws_rd=ssl&custom=abc
wird der Letzte parameter custom.
InformationsquelleAutor Saikat Ghosh
Dies ist eine Modifikation von Adilson Antwort, aber ohne dass Sie ein HttpModule:
In der globalen.asax.cs der MVC-Projekt:
InformationsquelleAutor Brandon