HttpCacheability.NoCache和Response.CacheControl =“no-cache”有什么不同?

时间:2012-05-09 22:43:30

标签: c# asp.net

下面两行之间有什么不同? :

Response.Cache.SetCacheability(HttpCacheability.NoCache);

 Response.CacheControl = "no-cache";

2 个答案:

答案 0 :(得分:5)

如果您仔细阅读文档,通常没有任何区别。

但是,由于前者使用了Cache对象(在Asp.Net 4或Asp.Net MVC中为HttpCachePolicyBase),因此它提供:

a)对响应对象的缓存策略的抽象,可用于测试场景

b)如果由于某种原因而扩展HTTP规范意味着NoCache需要更多响应中的标头,或者对响应进行其他调整,则可能出现未来验证。

它还允许根据客户端的功能透明地调整“不可缓存性”的概念;这在HTTP确实发展的情况下很重要 - 但在HTTP 1.0和1.1客户端的情况下也是如此(1.0和1.1之间的差异在HTTP 1.0 vs 1.1中得到了很好的总结)。

在第二行中,你负责如何应用no-cache指令(使用一个有点神奇的字符串) - 被授予,它仍然是可测试的,但如果HTTP规范确实发生了变化,那么你必须自己编写代码

最终,使用Response.Cache对象比直接编写标题更好的设计(例如,对于ETag和If-Not-Modified-自处理以来它实际上是自己的。)

答案 1 :(得分:1)

仅保留Response.CacheControl属性以实现向后兼容性。为其分配字符串时,它将在Response.Cache对象中设置相应的值。