2

下面的两行有什么不同?:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

 Response.CacheControl = "no-cache";
4

2 回答 2

5

如果您通读文档,通常情况下没有任何区别。

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

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

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

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

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

归根结底,使用Response.Cache对象比直接对标头进行编码更好(例如,对于 ETags 和 If-Not-Modified-Since 处理,它确实发挥了自己的作用)。

于 2012-05-09T22:53:49.117 回答
1

Response.CacheControl仅为了向后兼容而维护该属性。当你给它分配一个字符串时,它会在Response.Cache对象中设置相应的值。

于 2012-05-09T22:53:39.037 回答