C# HttpCacheability.NoCache和Response.CacheControl=”之间有什么不同;没有缓存;?

C# HttpCacheability.NoCache和Response.CacheControl=”之间有什么不同;没有缓存;?,c#,asp.net,C#,Asp.net,下面两行之间有什么不同 Response.Cache.SetCacheability(HttpCacheability.NoCache); 及 Response.CacheControl属性仅为向后兼容而维护。当您为它指定一个字符串时,它将在Response.Cache对象中设置相应的值。如果您通读文档,通常不会有任何差异 但是,由于前者在Asp.Net 4或Asp.Net MVC中使用缓存对象(HttpCachePolicyBase),因此它提供: a) 对响应对象缓存策略的抽象,可用于测试

下面两行之间有什么不同

Response.Cache.SetCacheability(HttpCacheability.NoCache);


Response.CacheControl
属性仅为向后兼容而维护。当您为它指定一个字符串时,它将在
Response.Cache
对象中设置相应的值。

如果您通读文档,通常不会有任何差异

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

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

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

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

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

最终,使用
Response.Cache
对象比直接对头进行编码更好(例如,对于ETag,它实际上是自己的,如果处理后没有修改)

 Response.CacheControl = "no-cache";