3

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

4

2 回答 2

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]);
            }
        }
    }
于 2013-01-09T20:37:52.400 回答
0

此处报告了此更新的一些问题,并且修复了 .net Framework 4 工作。可能是因为.net Framework坏了或者是framework和IIS的安装顺序导致了ASP.Net的注销,所以需要专门注册ASP.Net,有时会出现这些问题。

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

于 2013-01-08T10:13:14.197 回答