如何配置ASP.NET OutputCache与http vs https不同?

前端之家收集整理的这篇文章主要介绍了如何配置ASP.NET OutputCache与http vs https不同?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是场景,用户从我们的WebApp打开非安全页面,让我们在浏览器中调用它,然后单击一个链接,将它们带到PageB的安全实例.一旦在PageB,用户可以随后单击一个链接,将它们带回到PageA(他们已经查看过并在OutputCache中)的安全实例.我观察到,即使在访问PageB(安全的)之后,通过不同的URL访问PageA,它实际上是拉前一个缓存副本,而是创建一个新的.我在调试会话中验证了这种行为,并且惊讶的是,ASP.Net使用相同的OutputCache项来保护页面的安全副本.

我的问题是为什么这样呢?而如何告诉ASP.Net OutPutCache将安全URL的访问视为与非安全等效文件不同/唯一的项目?

[背景]

我们最近将我们的网站图像切换成对所有图像使用Scene7 / Akamai.因此,在安全连接上查看给定页面时,我们添加了使用不同Scene7网址的代码.此OutputCache问题不允许输出安全URL的逻辑执行,并导致丑陋的浏览器警告.

解决方法

我认为你可以做一个VaryByCustom =“计划”,并将它添加到你的Global.asax.cs文件(包括我使用的其他几个应用程序版本和用户):
public override string GetVaryByCustomString(HttpContext context,string custom)
    {
        if (custom.Equals("version",StringComparison.CurrentCultureIgnoreCase))
        {
            Assembly asm = Assembly.GetExecutingAssembly();
            string[] parts = asm.FullName.Split(',');
            string version = parts[1].Trim().ToLower();
            return version;
        }
        else if (custom.Equals("user",StringComparison.CurrentCultureIgnoreCase))
        {
            var user = Membership.Users.CurrentUser;
            return null == user ? string.Empty : user.Id.ToString();
        }
        else if (custom.Equals("scheme",StringComparison.CurrentCultureIgnoreCase))
        {
            var scheme = context.Request.IsSecureConnection ? "https" : "http";
            return scheme;
        }
        else
            return base.GetVaryByCustomString(context,custom);
    }

猜你在找的asp.Net相关文章