20

Ich möchte die Cache-Header ändern, die von einer Bundle-Anfrage gesendet werden. Derzeit variiert es durch User-Agent, aber ich will es nicht, gibt es eine Möglichkeit, die Header durch eine Bundle-Anfrage gesendet ändern?MVC4 Bündel-Cache-Header

Nach einem kurzen Blick in die System.Web.Optimization Assembly kann ich sehen, die Header in Bundle.SetHeaders gesetzt werden, die eine private statische Funktion ist, so glaube ich nicht, dass es möglich ist, obwohl ich gerne falsch bewiesen werden würde.

+4

Ich würde auch an irgendwelchen Gedanken von jedermann auf der Logik für das Hinzufügen dieses Headers in erster Linie interessiert sein - z.B. verhält sich der Bündelungscode je nach Benutzeragent anders? Oder ist es nur eine Vorsichtsmaßnahme? – Jamie

+0

Im Hinblick darauf, warum wir dies tun, wird es für das VS Page Inspector-Feature benötigt, das einen benutzerdefinierten User-Agent mit IE sendet, um zu verhindern, dass der IE-Cache Anforderungen an Seiteninspektor oder Seiteninspektor-Bundles an IE außerhalb von VS verpfuscht . –

+0

@HaoKung Ich habe das gleiche Problem, ich möchte in der Lage sein, den Cache-Control-Header-Wert auf 'public, max-age = 31536000' anstelle von' private', und auch eine Etag-Header hinzufügen. Es sieht so aus, als ob beide derzeit nicht möglich sind. –

Antwort

10

Dies ist nichts, was wir heute veröffentlichen. Wir stellen die Cacheability-Eigenschaft nur für die BundleRepsonse zur Verfügung, die eine IBundleTransform ändern könnte. Und ja, wir hätten ausdrücklich die folgenden Dinge festgelegt:

   HttpCachePolicyBase cachePolicy = context.HttpContext.Response.Cache; 
       cachePolicy.SetCacheability(bundleResponse.Cacheability); 
       cachePolicy.SetOmitVaryStar(true); 
       cachePolicy.SetExpires(DateTime.Now.AddYears(1)); 
       cachePolicy.SetValidUntilExpires(true); 
       cachePolicy.SetLastModified(DateTime.Now); 
       cachePolicy.VaryByHeaders["User-Agent"] = true; 

Wir haben ein Workitem unseren Rückstand dies zu öffnen und machen diese dehnbarer/anpassbare in der Zukunft.

+3

gibt es einen Hinweis auf den Zeitplan für diese Änderung, die Auswirkungen dieser Header spielt Chaos mit CDN-Integration –

+2

Problem Tracker URL: https://aspnetoptimization.codeplex.com/workitem/136. Erwähnt auch eine mögliche Problemumgehung. – janv8000

0

Es gibt einen Workaround, wie in janv8000's comment on this response erwähnt. Sie benötigen die folgende URL Rewrite-Regel, um Ihre Web-Server hinzuzufügen:

<system.webServer> 
    <rewrite> 
     <outboundRules> 
      <rule name="Cache Bundles" preCondition="IsBundles" patternSyntax="ExactMatch"> 
       <match serverVariable="RESPONSE_Vary" pattern="User-Agent" /> 
       <action type="Rewrite" value="Accept-Encoding" /> 
      </rule> 
      <preConditions> 
       <preCondition name="IsBundles" patternSyntax="Wildcard"> 
        <add input="{URL}" pattern="*/bundles/*" /> 
       </preCondition> 
      </preConditions> 
     </outboundRules> 
    </rewrite> 
</system.webServer> 

Offensichtlich Sie achten müssen dementsprechend die IsBundles Voraussetzung haben alle Bündel in Ihrem Bündel Ordner oder ändern.