2010-08-10 50 views
7

我试图设置cachabilityASP.NET资源。所以如果我goto/foo/show它会显示一些资源的视图,并缓存几个小时(例如)。为此,我使用OutputCache属性来装饰我的Action方法。该缓存的详细信息(针对此操作方法)可在web.config文件中找到。如何在ASP.NET应用程序中设置S-MaxAge CacheControl值?

当我设置此输出缓存时,它正确设置maxage value ..但s-maxage值为0. WTF?

这里的代码...

[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不是?有人可以帮我解决这个问题吗?

回答

12

我找到了答案,[AuthorizeAttribute]清除任何maxage为零。这意味着,没有代理每个缓存的查看结果具有授权

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

(我已添加此答案而不是删除,以帮助其他开发者解决此问题)。

另外,类似的问题:Can someone explain this block of ASP.NET MVC code to me, please?

相关问题