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