MVC4捆绑缓存头

23
我希望更改从包请求发送的缓存标头。目前,它由User-Agent变化,但我不想这样做,有没有办法更改包请求发送的标头?
快速查看System.Web.Optimization程序集后,我可以看到标头是在Bundle.SetHeaders中设置的,这是一个私有静态函数,所以我认为不可能,尽管我很想被证明是错误的。

4
我也很想听听大家对于添加这个头部的逻辑的任何想法 - 例如,捆绑代码本身是否会根据用户代理而表现出不同的行为?还是只是一种预防措施? - jamiecon
关于为什么我们这样做,是因为需要 VS 页面检查器功能发送一个使用 IE 的自定义用户代理,以防止 IE 缓存干扰到页面检查器的请求,或将页面检查器捆绑包提供给 VS 以外的 IE。 - Hao Kung
@HaoKung 我有同样的问题,我想将缓存控制头值设置为public,max-age=31536000而不是private,并且还要添加Etag头。看起来目前这两个都不可能实现? - JK.
2个回答

12

目前我们没有公开这个功能。我们只在IBundleTransform可更改的BundleResponse上公开了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集成带来了很大的麻烦。 - Adam Stewart
3
问题追踪器网址:https://aspnetoptimization.codeplex.com/workitem/136。还提到了一个可能的解决方法。 - janv8000
已经快六年了。修复这个问题有进展吗? - A.R.

2

如在janv8000在该回答中提到的,有一种解决方法。您需要将以下URL重写规则添加到您的Web服务器中:

<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>

显然,您需要注意将所有的bundles放在bundles文件夹中,或相应地更改IsBundles前提条件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接