MVC bündelt 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 der Frage 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 der Antwort 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, 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:
InformationsquelleAutor der Antwort 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 der Antwort 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.
InformationsquelleAutor der Antwort 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 der Antwort Saikat Ghosh
Dies ist eine Modifikation von Adilson Antwort, aber ohne dass Sie ein HttpModule:
In der globalen.asax.cs der MVC-Projekt:
InformationsquelleAutor der Antwort Brandon