9

我正在尝试设置ASP.NET资源的可缓存性。因此,如果我转到 /foo/show 它将显示某个资源的视图,并将其缓存几个小时(例如)。为此,我使用了装饰我的操作方法的 OutputCache 属性。此缓存的详细信息(针对此操作方法)可在 web.config 文件中找到。

当我设置此输出缓存时,它正确设置了maxage value,但s-maxage值为 0。这是为什么呢?

这是代码:

[Authorize]
[OutputCache(CacheProfile = "SomeController_Show")]
public ActionResult Show(){ ... }

这是配置文件的片段:

<add name="SomeController_Show" duration="3600" varyByParam="authkey;format;blah"  />

和响应的片段:

Cache-Control:public, max-age=3576, **s-maxage=0**
Content-Length:746
Content-Type:application/json; charset=utf-8
Date:Tue, 10 Aug 2010 00:42:17 GMT
Expires:Tue, 10 Aug 2010 01:41:53 GMT
Last-Modified:Tue, 10 Aug 2010 00:41:53 GMT
Server:Microsoft-IIS/7.0
Vary:*

注意 maxage 是如何正确设置的,但 s-maxage 不是?

4

1 回答 1

13

我找到了答案,将[AuthorizeAttribute]任何最大值清除为零。这意味着,没有代理每个缓存具有Authorization的视图结果。

我猜代理通过 url 缓存内容 .. 所以如果 url 不包含任何身份验证详细信息(这真的不应该...... :) .. 那么它如何知道哪两个不同的请求是针对是不是同一个人?

(我添加了这个答案而不是删除,以帮助其他开发人员解决这个问题)。

另外,类似的问题:有人可以向我解释一下这块 ASP.NET MVC 代码吗?

于 2010-08-10T03:06:50.093 回答