我已阅读the AuthorizeAttribute's source code,代码评论说:
// Since we're performing authorization at the action level, the authorization code runs
// after the output caching module. In the worst case this could allow an authorized user
// to cause the page to be cached, then an unauthorized user would later be served the
// cached page. We work around this by telling proxies not to cache the sensitive page,
// then we hook our custom authorization code into the caching mechanism so that we have
// the final say on whether a page should be served from the cache.
现在我要确认此评论。这是真的吗?什么是“最坏的情况”?我该怎么做呢?
更新
我重写了OnAuthorization(),没有过滤OutputCacheAttribute。
然后在需要授权的操作上放置一个[OutputCache(Duration = 30000,VaryByParam =“*”)],但是在先前授权的用户登录后,它没有按预期工作,后一个用户还需要授权。或者我的问题是“如何使OutputCacheAttribute工作?”
UPDATE2:
从互联网上搜索后,我找到了原因。在.NET Framework 2.0.50727.4209或更高版本上,如果Page的响应包含cookie,则OutputCache将不起作用。
显然,ASP.NET MVC基于较新版本的.NET Framework,使用ASP.NET Forms Authenticate,授权页面每次都会将经过身份验证的票据作为cookie(HttpOnly)响应,并且不会被缓存。
这很奇怪,似乎缓存问题永远不会发生在ASP.NET MVC应用程序的授权页面上。为什么AuthorizeAttribute需要处理它? http://androidyou.blogspot.com/2012/10/aspnet-output-cache-not-working-and.html
UPDATE3
我的错误,正常的Forms Authenticate不会每次都将经过身份验证的票据作为cookie响应,但是我的自定义AuthorizeAttribute会这样做,所以毫无疑问,正常的AuthrizeAttribute会处理缓存问题。