2009-05-27 52 views
2

无法将类型为'System.Web.Caching.CachedRawResponse'的对象转换为键入'System.Web.Caching.CachedVary'。未处理的异常CachedRawResponse asp.net

我在AJAX调用aspx页面时得到这个,并且在webland中找不到关于它的任何信息。 CachedRawResponse甚至不在MSDN上。有没有人知道这件事,或者让我指出正确的方向?

回答

1

我们最近有同样的问题,结果(在我们的例子中)页面输出缓存模块是如何设置你的Response.Cache.VaryByXyz属性相当敏感。我们使用的代码像我们的HTTP压缩模块如下所示:

if (IsBrowserSupported(userAgent)) 
{ 
    Response.Cache.VaryByHeaders["Accept-Encoding"] = true; 
    ... 
} 

不幸的是,这将导致ASP.NET扔当页面是由不支持的浏览器调用后缓存,并随后要求从拟合由受支持的浏览器缓存。

不设置任何VaryByXyz导致存储在ASP.NET输出缓存一个CachedRawResponse,但如果你做你的要求时设置的任何VaryByXyz,ASP.NET需要一个CachedVary在该位置。而不是检查缓存页面是否是正确的类型,框架只会投射,导致InvalidCastException

道德故事:无论请求头还是其他非请求相关变量,始终始终设置VaryByXyz。在我们的案例中,将VaryByHeaders置于if之外解决了错误。