20

バンドルリクエストから送信されたキャッシュヘッダーを変更したい。現在はUser-Agentで変更されていますが、バンドルリクエストで送信されたヘッダーを変更する方法はありますか?私は、ヘッダは、私が間違って証明するのが大好きだが、私はその可能性を考えていないプライベート静的関数であるBundle.SetHeadersで設定を見ることができますSystem.Web.Optimizationアセンブリで簡単に見た後MVC4バンドルキャッシュヘッダー

+4

私は、最初にこのヘッダーを追加するロジックの誰かからの意見にも興味があります。バンドルコード自体はユーザエージェントによって異なった振る舞いをしますか?それとも予防策ですか? – Jamie

+0

私たちがこれを行う理由は、IEのキャッシュがページインスペクタへのリクエストを混乱させないように、またはVSの外部のIEにページインスペクタバンドルを提供するのを防ぐために、IEを使用してカスタムユーザエージェントを送信するVSページインスペクタ機能。 –

+0

@HaoKung私は同じ問題を抱えています。私は 'private'の代わりに' public、max-age = 31536000'にキャッシュコントロールヘッダーの値を設定し、Etagヘッダーも追加したいと考えています。これらの両方が現在可能ではないようですね? –

答えて

10

これは現在、現在公開されているものではありません。 IBundleTransformが変更できるBundleRepsonseのCacheabilityプロパティのみを公開します。そして、はい、我々は明示的に次のものを設定します。

   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; 

我々はこれを開き、将来のカスタマイズ/これは、より拡張可能にする作業項目、当社のバックログを持っています。

+3

この変更のタイムラインについては、このヘッダーの影響がCDN統合 –

+2

の問題トラッカーURL:https://aspnetoptimization.codeplex.com/workitem/136で大きな影響を与えます。考えられる回避策についても触れています。 – janv8000

0

janv8000's comment on this responseに記載されているように回避策があります。あなたのWebサーバに、次のURLの書き換えルールを追加する必要があります。

明らか
<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> 

あなたのバンドルフォルダ内のすべてのあなたのバンドルを持っているかに応じてIsBundles前提条件を変更するには注意を払う必要があります。