输出缓存不工作.net4.0

时间:2013-01-08 09:06:02

标签: asp.net .net-4.0 outputcache

我们正在使用.net framework 4.0开发一个asp.net站点。我们试图为它合并输出缓存 但不幸的是,它没有奏效。后来我们发现删除Microsoft安全更新KB2656351将解决问题 我想知道在没有删除更新的情况下还有其他方法可以做到这一点。

2 个答案:

答案 0 :(得分:1)

只有当您安装上述更新并且响应中有Cookie时,才会出现此问题。无论Cookie是否包含在请求中。找到解决此问题的解决方法。我创建了一个自定义HTTPModule,并将响应中的所有可用cookie(包括新添加的cookie)复制到Context.Items。然后清除响应中可用的所有cookie。

在下一步中,读取Context.items中存储的对象并添加回响应。因此,当输出缓存提供程序尝试缓存页面时,响应中没有cookie。所以它像往常一样工作。然后再添加cookie。

    public void Init(HttpApplication context)
    {
        context.PostReleaseRequestState += new EventHandler(OnPostReleaseRequestState);
        context.PostUpdateRequestCache += new EventHandler(OnPostUpdateRequestCache);
    }

    public void OnPostReleaseRequestState(Object source, EventArgs e)
    {
        HttpApplication application = (HttpApplication)source;
        HttpContext context = application.Context;
        HttpCookieCollection cookieCollection = new HttpCookieCollection();
        foreach (string item in context.Response.Cookies)
        {
            HttpCookie tempCookie = context.Response.Cookies[item];

            HttpCookie cookie = new HttpCookie(tempCookie.Name) { Value = tempCookie.Value, Expires = tempCookie.Expires, Domain = tempCookie.Domain, Path = tempCookie.Path };
            cookieCollection.Add(cookie);
        }
        context.Items["cookieCollection"] = cookieCollection;
        context.Response.Cookies.Clear();
    }

    public void OnPostUpdateRequestCache(Object source, EventArgs e)
    {
        HttpApplication application = (HttpApplication)source;
        HttpContext context = application.Context;
        HttpCookieCollection cookieCollection = (HttpCookieCollection)context.Items["cookieCollection"];
        if (cookieCollection != null)
        {
            foreach (string item in cookieCollection)
            {
                context.Response.Cookies.Add(cookieCollection[item]);
            }
        }
    }

答案 1 :(得分:0)

此更新报告here有一些问题,修复.net Framework 4有效。这可能是因为.net Framework的破坏或安装框架和IIS的顺序,它取消了ASP.Net的注册,因此我们需要专门注册ASP.Net,这有时会导致这些问题。

我建议修复.Net框架,并分别注册ASP.Net以查看是否有效。