在这个场景中,用户从我们的WebApp打开非安全页面,让我们在浏览器中将其称为PageA,然后单击其中的链接,将其带到PageB的安全实例.进入PageB后,用户可以随后单击一个链接,将其带回到PageA的安全实例(他们已经查看过并在OutputCache中).我观察到,即使在访问PageB(安全的)之后通过不同的URL访问PageA,它实际上是拉动先前的缓存副本而不是创建一个新的.我在调试会话中验证了这种行为,并且惊讶于ASP.Net使用相同的OutputCache项来获取页面的安全副本.
我的问题是为什么会这样?我如何告诉ASP.Net OutPutCache将来自安全URL的访问视为与非安全等价物不同/唯一的项目?
[背景]
我们最近将网站图像切换为使用Scene7/Akamai拍摄所有图像.因此,我们在安全连接上查看给定页面时添加了使用不同Scene7 URL的代码.此OutputCache问题不允许输出安全URL的逻辑执行,并导致丑陋的浏览器警告.
我想对我将支持的VaryByCustom参数类型使用Enum值,是否可以这样做?
我尝试在页面中设置它
<%@ OutputCache Duration="600" VaryByParam="none"
VaryByCustom='<%=VaryByCustomType.IsAuthenticated.ToString(); %>' %>
Run Code Online (Sandbox Code Playgroud)
但是这返回了"<%=VaryByCustomType.IsAuthenticated.ToString(); %>"我内部的整个文字字符串global.asax是否有任何方法可以在页面本身或代码隐藏中执行此操作?或者这只是我必须接受的纯粹魔术字符串而我无法为其添加类型安全性吗?