我搞砸了......重新 这个 和 这个 “元”问题......
一个非常基本的http请求:
GET http://stackoverflow.com/feeds/tag?tagnames=c%23&sort=newest HTTP/1.1
Host: stackoverflow.com
Accept-Encoding: gzip,deflate
遇到装饰有以下路线的路线:
[OutputCache(Duration = 300, VaryByParam = "tagnames;sort",
VaryByContentEncoding = "gzip;deflate", VaryByCustom = "site")]
是反复的 并且不正确 如果你包括if-modified-since,则提供304(无变化),或者 旧数据 为200,即
HTTP/1.1 200 OK
Cache-Control: public, max-age=0
Content-Type: application/atom+xml; charset=utf-8
Content-Encoding: gzip
Expires: Fri, 01 Jul 2011 09:17:08 GMT
Last-Modified: Fri, 01 Jul 2011 09:12:08 GMT
Vary: *
Date: Fri, 01 Jul 2011 09:42:46 GMT
Content-Length: 14714
(payload, when decoded = some long-stale data)
正如你所看到的,它服务了近半个小时 过去 5分钟的插槽;看起来OutputCache的内部结构根本没有注意到时间; p它会过期 终于 (事实上,它刚刚这样做了 - 我的 Fri, 01 Jul 2011 09:56:20 GMT 请求终于得到了新的数据),但不是像准时的任何地方。
更新:
一世 相信 如果我们拿走了accept-encoding标头,它就可以了,但是没有;这也失败了 - 它只是在一个不同的循环中失败(这是我们应该期待的,因为密钥是不同的,礼貌的 VaryByContentEncoding):
GET http://stackoverflow.com/feeds/tag?tagnames=c%23&sort=newest HTTP/1.1
Host: stackoverflow.com
得到:
HTTP/1.1 200 OK
Cache-Control: public, max-age=0
Content-Type: application/atom+xml; charset=utf-8
Expires: Fri, 01 Jul 2011 10:09:58 GMT
Last-Modified: Fri, 01 Jul 2011 10:04:58 GMT
Vary: *
Date: Fri, 01 Jul 2011 10:17:20 GMT
Content-Length: 66815
(payload = some stale data)
再次,你会注意到它正在服务 后 Expires。
那么:这里可能出现什么问题?
额外;我们正在使用自定义选项,我们的 GetVaryByCustomString() 正确的电话 base.GetVaryByCustomString(ctx, custom) 对于它无法识别的选项,按照 MSDN (事实上,这适用于上面的第二个例子)。