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